자유게시판

사분기로 약재 단가를 뽑는 것을 다시 해야만 할 것 같다.

작성자 정보

  • 삼둡 작성
  • 작성일

컨텐츠 정보

본문

1be1746ef7b4adac4c1f7ad73c7a41525e41977e537f.png

첫 날 계산: 주어진 사분기의 첫 달의 첫 날을 "-01"을 사용해 생성하고, 이 날짜를 strtotime과 date 함수로 변환합니다.
끝 날 계산: 주어진 사분기의 마지막 달의 첫 날을 "-01"을 사용해 생성하고, date("Y-m-t")를 사용해 그 달의 마지막 날을 반환합니다.

5de27a7a74380bce72defabdb1de06306a35ea05w725.png

 

8월달 진료라면

 

4,5,6월의 가중평균가로 계산하되, 

그게 없다면 가장 최근 구입 발생한 분기의 가중평균가

 

현재의 달에서 한달을 뺀 날짜가 해당하는 사분기를 기준으로 해서  //기준점분기 standardQuarter              1번

그 전 사분기를 먼저 체크해서 있으면 그 가중평균가가 그 약재의 코스트가 된다. // 기준점전사분기 standardQuarter -1      2번

그 다음 없다면 현사분기를 체크해서 있으면  그 가중평균가가 그 약재의 코스트가 된다. // currentQuarter   3번

그 다음 없다면 전전사분기 체크, 전전전사분기 체크 // standardQuarter--         4번 여기부터 루프를 돌립니다.

 

 

<?

 

include_once("./_common.php");
$g4[title]="첩약보험 약재가격  체크 테스트입니다.";

include_once("./lib.php");
include_once("$g4[path]/_head.php");

 

erp_connect ();

rx_level(5);

$allupdatesql="";
$uupdatesql="";
 


$currentYear = date('Y');  // 현재 년도
$currentQuarter = ceil(date('n') / 3); // 현재 분기            3번준비 완료
 

$standardYear = date('Y');  // 기준 년도

$standardMonth= date('M'); // 기준 월

$standardMonth --;

                if ($standardMonth == 0) {
                       $standardMonth= 12;
                       $standardYear--;
               } 
$standardQuarter=getQuarter($standardMonth);                     //      1번준비 완료

//한달을 빼서 기준점분기를 찾아내었다.

 

$thisYear=$standardYear ;

$thisQuarter=$standardQuarter -1 ;

                if ($ThisQuarter == 0) {
                       $ThisQuarter= 4;
                       $ThisYear--;
               }                                          // 2번 준비 완료

 

$tablename= "herb"; //
$search_where="WHERE  stock > 0 ";
$orderby="order by herb asc";

$query="select count(*) from $tablename $search_where $orderby"; // SQL 쿼리문을 문자열 변수에 일단 저장하고
 

//echo $query;

$result=sql_q2($query);
$row=mysql_fetch_row($result); //위 결과 값을 하나하나 배열로 저장합니다.
$total_no=$row[0];


echo "<h1> 재고량이 있는 약재 개수는 총 $total_no 개 입니다. </h1>";
$query="SELECT herb, cost from $tablename $search_where  $orderby "; // SQL 쿼리문
//echo $query;

//echo $query,":::",$total_page,",",$cur_num;
//$result=mysql_query($query) or die (mysql_error()); // 쿼리문을 실행 결과
//쿼리 결과를 하나씩 불러와 실제 HTML에 나타내는 것은 HTML 문 중간에 삽입합니다.


$result=sql_q2($query);

$herbcount=0;

while($array=mysql_fetch_array($result)) { //herb를 돌리는 루프

       $herbcount++;

       //if ($herbcount==10) { echo "10개 넘었어요";break; }

       $herb=$array['herb'];
       $excost=$array['cost'];
 

/*

 

그 전 사분기를 먼저 체크해서 있으면 그 가중평균가가 그 약재의 코스트가 된다. // 기준점전사분기 standardQuarter -1      2번

그 다음 없다면 현사분기를 체크해서 있으면  그 가중평균가가 그 약재의 코스트가 된다. // currentQuarter   3번

그 다음 없다면 전전사분기 체크, 전전전사분기 체크 // standardQuarter--         4번 여기부터 루프를 돌립니다.

*/

 

//thisQuarter 에 입고체크를 먼저 합니다. 2번과정 thisYear, thisQuarter

//2번 사분기 = this = standard -1사분기 = 

$startThisQuarterDate = date("Y-m-d", strtotime($thisYear . "-". (($thisQuarter - 1) * 3 + 1) . "-01"));

$endThisQuarterDate = date("Y-m-t", strtotime($thisYear . "-". ($thisQuarter * 3) . "-01"));               // 현재 사분기의 끝 날 계산

 

$ssql = "SELECT count(*) FROM used_herb WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "' AND time <= '" . $endThisQuarterDate. "'";

 $rresult=sql_q2($ssql);

echo "<pre> $ssql 사분기 체크 </pre>\n";

$row=mysql_fetch_row($rresult);
$rrows=$row[0];
if ($rrows) {   echo "&& $rrows &&번의 입고가  사분기 ($thisYear - $thisQuarter)에는 확인되었습니다. <br> \n"; 


$ssql = "SELECT herb,  cost , using_gram
                               FROM used_herb
                               WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "'
                               AND time <= '" . $endThisQuarterDate. "'";

               //      echo  "<pre> $ssql </pre> \n <br> ";


$rresult = sql_q2($ssql);
 


$totalPrevCost = 0;
$totalPrevQuantity = 0;
$herbcount=0;


while ($row = mysql_fetch_array($rresult)) {
$totalPrevCost += $row["cost"];  echo $row["cost"],"/",$row["using_gram"]," :: ";
$herbcount++;
                       }//while 해당 구문에서 나오는 코스트와 양을 모두 잡아놓는다. 그래서 다 더한다.

                       //$avgPrevCostPerGram = calculateAverageCost($totalPrevCost, $totalPrevQuantity);
$avgPrevCostPerGram = $totalPrevCost / $herbcount;
                       // Update the herb table with the calculated average cost per gram for the matching herbname

$time = time();
$time=date("Y-m-d H:i:s", $time);

$cost = round($avgPrevCostPerGram);
$updateSql = "UPDATE herb SET cost = $cost, cost_date='$time' WHERE herb='$herb';";
                       // $conn->query($updateSql);
echo "<pre> $updateSql </pre> \n <br> ";

$historysql="insert into herbhistory set herb='$herb', event='단가변경', cost='$cost', comment='$herb:$excost -> $cost:전사분기 고려  단가변경', write_time='$time';";


$allupdatesql .=$updateSql . "<br>\n". $historysql."<br>\n<br>\n";
$uupdatesql .=$updateSql . "\n". $historysql."\n";

 

echo "Herb table updated successfully for quarter $currentQuarter in $currentYear. <br> updated into $herb --> cost: $avgPrevCostPerGram = $totalPrevCost / $herbcount  <br><br><br> \n";
break;  // Break the loop once data is found and updated
}// if num_rows>0

/*

이제 3번 차례

 

그 다음 없다면 현사분기를 체크해서 있으면  그 가중평균가가 그 약재의 코스트가 된다. // currentQuarter   3번

그 다음 없다면 전전사분기 체크, 전전전사분기 체크 // standardQuarter--         4번 여기부터 루프를 돌립니다.

*/
$startThisQuarterDate = date("Y-m-d", strtotime($currentYear . "-". (($currentQuarter - 1) * 3 + 1) . "-01"));

$endThisQuarterDate = date("Y-m-t", strtotime($currentYear . "-". ($currentQuarter * 3) . "-01"));

 

$avgPrevCostPerGram = 0;
 

$ssql = "SELECT count(*) FROM used_herb WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "' AND time <= '" . $endThisQuarterDate. "'";

$rresult=sql_q2($ssql);

              //echo "전사분기 입고 없어서,   현사분기 체크 <br>\n";
$row=mysql_fetch_row($rresult);
$rrows=$row[0];
if ($rrows) {  echo "&& $rrows &&%%%%% 전 사분기 입고가 없어, 현 사분기를 검사했더니, 현 사분기에는 이 갯수만큼의 입고가 확인되었습니다. <br> \n";
$ssql = "SELECT herb,  cost , using_gram FROM used_herb WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "' AND time <= '" . $endThisQuarterDate. "'";

$rresult = sql_q2($ssql);
$totalPrevCost = 0;
$totalPrevQuantity = 0;
$herbcount=0;
while ($row = mysql_fetch_array($rresult)) {
$totalPrevCost += $row["cost"];
$herbcount++; echo $row["cost"],"/",$row["using_gram"]," :: ";
                      }//while 해당 구문에서 나오는 코스트와 양을 모두 잡아놓는다. 그래서 다 더한다.

                      //$avgPrevCostPerGram = calculateAverageCost($totalPrevCost, $totalPrevQuantity);
$avgPrevCostPerGram = $totalPrevCost / $herbcount;
                      // Update the herb table with the calculated average cost per gram for the matching herbname

$cost = round($avgPrevCostPerGram);
$time = time();
$time=date("Y-m-d H:i:s", $time);

$updateSql = "UPDATE herb SET cost = $cost, cost_date='$time'  WHERE herb='$herb';";
                      // $conn->query($updateSql);
echo "<pre> $updateSql </pre> \n <br> ";

$historysql="insert into herbhistory set herb='$herb', event='단가변경', cost='$cost', comment='$herb:$excost -> $cost:전사분기  없어서 현사분기로 단가책정', write_time='$time';";

 

$allupdatesql .=$updateSql . "<br>\n". $historysql."<br>\n<br>\n";

$uupdatesql .=$updateSql . "\n". $historysql."\n";


echo "Herb table updated successfully for quarter $currentQuarter in $currentYear. <br> updated into $herb --> cost: $avgPrevCostPerGram = $totalPrevCost / $herbcount  <br><br><br> \n";
break;  // Break the loop once data is found and updated

} //전사분기 데이터 없었고, 현 사분기의 데이터는 있어서, 약재가 반영 끝

//현재 사분기 약재 검사 끝.  3번 완료

 

//4번 시작

//4번은 루프입니다.

/*

그 전 사분기를 먼저 체크해서 있으면 그 가중평균가가 그 약재의 코스트가 된다. // 기준점전사분기 standardQuarter -1      2번

그 다음 없다면 현사분기를 체크해서 있으면  그 가중평균가가 그 약재의 코스트가 된다. // currentQuarter   3번

그 다음 없다면 전전사분기 체크, 전전전사분기 체크 // standardQuarter--         4번 여기부터 루프를 돌립니다.

*/
 

while ($thisYear> 2022) {
$timer++;
if ($timer==100000)  { break; }

 

$thisQuarter--;  // If it's the first quarter of the year, consider the last quarter of the previous year
 if (thisQuarter == 0) {  $thisQuarter = 4;   $year--;      } //쿼터를 하나 줄이고 0되면 전년도 4분기로 변경

 

echo "$thisYear-$yhisQuarter <--- this check <br> \n";

$startThisQuarterDate = date("Y-m-d", strtotime($currentYear . "-". (($thistQuarter - 1) * 3 + 1) . "-01"));

$endThisQuarterDate = date("Y-m-t", strtotime($currentYear . "-". ($thisQuarter * 3) . "-01"));


$avgPrevCostPerGram = 0;
$ssql = "SELECT count(*) FROM used_herb WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "' AND time <= '" . $endThisQuarterDate. "'";

$rresult=sql_q2($ssql);

//echo "<pre> $ssql 사분기 체크 </pre>\n";

$row=mysql_fetch_row($rresult);
$rrows=$row[0];
if ($rrows) {  echo "&& $rrows &&번의 입고가  사분기 ($thisYear - $thisQuarter)에는 확인되었습니다. <br> \n"; }


$ssql = "SELECT herb,  cost , using_gram     FROM used_herb
                               WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "'
                               AND time <= '" . $endThisQuarterDate. "'";

               //      echo  "<pre> $ssql </pre> \n <br> ";


               $rresult = sql_q2($ssql);

 

 

 

 

 

 

/*

date("Y-m-t", strtotime(...))는 주어진 날짜의 그 달의 마지막 날을 Y-m-d 형식으로 반환합니다. 여기서 t는 주어진 달의 마지막 날을 나타냅니다. 예를 들어, 6월의 마지막 날은 30일입니다.

첫 날 계산: 주어진 사분기의 첫 달의 첫 날을 "-01"을 사용해 생성하고, 이 날짜를 strtotime과 date 함수로 변환합니다.
끝 날 계산: 주어진 사분기의 마지막 달의 첫 날을 "-01"을 사용해 생성하고, date("Y-m-t")를 사용해 그 달의 마지막 날을 반환합니다.

*/

 

 

이 밑으로는 기존 소스 및 참고 소스이다.

 

function getQuarter($month) {
   // Check if the month is a valid number between 1 and 12
   if ($month < 1 || $month > 12) {
       return "Invalid month. Please enter a number between 1 and 12.";
   }
   
   switch ($month) {
       case 1:
       case 2:
       case 3:
           return 1; // First quarter
       case 4:
       case 5:
       case 6:
           return 2; // Second quarter
       case 7:
       case 8:
       case 9:
           return 3; // Third quarter
       case 10:
       case 11:
       case 12:
           return 4; // Fourth quarter
       default:
           return "Invalid month. Please enter a number between 1 and 12.";
   } //switch
}//function getQuarter


 

 

//이상 기준점 연월분기를, 현재에서 한달을 빼서 잡는다.

 

 


echo "현재의 사분기는 다음과 같습니다.", $currentYear,"-",$currentQuarter, "<br>\n";

$currentYear=$yr;
$currentQuarter=$q;

echo "그렇지만, 이것은 테스트이니 사분기를 다음과 같이 셋팅한 후 테스트하려고 합니다." , $currentYear,"-",$currentQuarter, "<br>\n";


//현재 사분기를 org___로 저장함
$orgcurrentYear=$currentYear;
$orgcurrentQuarter=$currentQuarter;
 

 

 

------------------------

             $startThisQuarterDate = date("Y-m-d", strtotime($orgcurrentYear . "-". (($orgcurrentQuarter - 1) * 3 + 1) . "-01"));

              // 현재 사분기의 첫 날 계산
              $endThisQuarterDate = date("Y-m-t", strtotime($orgcurrentYear . "-". ($orgcurrentQuarter * 3) . "-01"));

              $avgPrevCostPerGram = 0;

              // Get the data for the previous quarter

              $ssql = "SELECT count(*) FROM used_herb WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "' AND time <= '" . $endThisQuarterDate. "'";

              $rresult=sql_q2($ssql);

              //echo "전사분기 입고 없어서,   현사분기 체크 <br>\n";
              $row=mysql_fetch_row($rresult);
              $rrows=$row[0];
              if ($rrows) {
                      echo "&& $rrows &&%%%%% 전 사분기 입고가 없어, 현 사분기를 검사했더니, 현 사분기에는 이 갯수만큼의
입고가 확인되었습니다. <br> \n";

 

              $ssql = "SELECT herb,  cost , using_gram FROM used_herb WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "' AND time <= '" . $endThisQuarterDate. "'";

               //     echo  "<pre> $ssql 현사분기</pre> \n <br> ";

              $rresult = sql_q2($ssql);
                      $totalPrevCost = 0;
                      $totalPrevQuantity = 0;
                      $herbcount=0;
                      while ($row = mysql_fetch_array($rresult)) {
                              $totalPrevCost += $row["cost"];
                              $herbcount++;
                      }//while 해당 구문에서 나오는 코스트와 양을 모두 잡아놓는다. 그래서 다 더한다.

                      //$avgPrevCostPerGram = calculateAverageCost($totalPrevCost, $totalPrevQuantity);
                      $avgPrevCostPerGram = $totalPrevCost / $herbcount;
                      // Update the herb table with the calculated average cost per gram for the matching herbname

                      $cost = round($avgPrevCostPerGram);
                      $updateSql = "UPDATE herb SET cost = $cost, cost_date='$time' WHERE herb='$herb';";
                      // $conn->query($updateSql);
                      echo "<pre> $updateSql </pre> \n <br> ";

                      $time = time();
                      $time=date("Y-m-d H:i:s", $time);

                      $historysql="insert into herbhistory set herb='$herb', event='단가변경', cost='$cost', comment='$herb:$excost -> $cost:전사분기   없어서 현사분기로 단가책정', write_time='$time';";

                       $allupdatesql .=$updateSql . "<br>\n". $historysql."<br>\n<br>\n";


                       $uupdatesql .=$updateSql . "\n". $historysql."\n";


                      echo "Herb table updated successfully for quarter $currentQuarter in $currentYear. <br> updated into $herb --> cost: $avgPrevCostPerGram = $totalPrevCost / $herbcount  <br><br><br> \n";
                      break;  // Break the loop once data is found and updated


 

추가

else

 

{

//지정된 현사분기에도 입고가 없다면, 실제 현사분기 입고가 있는지를 체크해야만 한다.

//oorg로 진짜 현사분기를 넣어볼까 합니다.

 

             $startThisQuarterDate = date("Y-m-d", strtotime($orgcurrentYear . "-". (($orgcurrentQuarter - 1) * 3 + 1) . "-01"));

              // 현재 사분기의 끝 날 계산
              $endThisQuarterDate = date("Y-m-t", strtotime($orgcurrentYear . "-". ($orgcurrentQuarter * 3) . "-01"));

              $avgPrevCostPerGram = 0;

              // Get the data for the previous quarter

              $ssql = "SELECT count(*) FROM used_herb WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "' AND time <= '" . $endThisQuarterDate. "'";

              $rresult=sql_q2($ssql);

              //echo "전사분기 입고 없어서,   현사분기 체크 <br>\n";
              $row=mysql_fetch_row($rresult);
              $rrows=$row[0];
              if ($rrows) {
                      echo "&& $rrows &&%%%%% 전 사분기 입고가 없어, 현 사분기를 검사했더니, 현 사분기에는 이 갯수만큼의
입고가 확인되었습니다. <br> \n";

 

              $ssql = "SELECT herb,  cost , using_gram FROM used_herb WHERE  herb='$herb' AND mode='입고' AND time>= '" . $startThisQuarterDate . "' AND time <= '" . $endThisQuarterDate. "'";

               //     echo  "<pre> $ssql 현사분기</pre> \n <br> ";

              $rresult = sql_q2($ssql);
                      $totalPrevCost = 0;
                      $totalPrevQuantity = 0;
                      $herbcount=0;
                      while ($row = mysql_fetch_array($rresult)) {
                              $totalPrevCost += $row["cost"];
                              $herbcount++;
                      }//while 해당 구문에서 나오는 코스트와 양을 모두 잡아놓는다. 그래서 다 더한다.

                      //$avgPrevCostPerGram = calculateAverageCost($totalPrevCost, $totalPrevQuantity);
                      $avgPrevCostPerGram = $totalPrevCost / $herbcount;
                      // Update the herb table with the calculated average cost per gram for the matching herbname

                      $cost = round($avgPrevCostPerGram);
                      $updateSql = "UPDATE herb SET cost = $cost, cost_date='$time' WHERE herb='$herb';";
                      // $conn->query($updateSql);
                      echo "<pre> $updateSql </pre> \n <br> ";

                      $time = time();
                      $time=date("Y-m-d H:i:s", $time);

                      $historysql="insert into herbhistory set herb='$herb', event='단가변경', cost='$cost', comment='$herb:$excost -> $cost:전사분기   없어서 현사분기로 단가책정', write_time='$time';";

                       $allupdatesql .=$updateSql . "<br>\n". $historysql."<br>\n<br>\n";


                       $uupdatesql .=$updateSql . "\n". $historysql."\n";


                      echo "Herb table updated successfully for quarter $currentQuarter in $currentYear. <br> updated into $herb --> cost: $avgPrevCostPerGram = $totalPrevCost / $herbcount  <br><br><br> \n";
                      break;  // Break the loop once data is found and updated

 

 

}

관련자료

댓글 0
등록된 댓글이 없습니다.

인기검색어


최근글


새댓글