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

첫 날 계산: 주어진 사분기의 첫 달의 첫 날을 "-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
}
관련자료
-
이전
-
다음