사분기로 약재 단가를 뽑는 것을 다시 해야만 할 것 같다.
작성자 정보
- 삼둡 작성
- 작성일
컨텐츠 정보
- 4,335 조회
- 
					
					
					
					
						
						목록
					
											
본문

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

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
}
관련자료
- 
			이전
- 
			다음
 
								 
                         
                        
                    