示例#1
0
function saveDoc()
{
    $obj = new ACC_docs();
    PdoDataAccess::FillObjectByArray($obj, $_POST);
    $obj->CycleID = $_SESSION["accounting"]["CycleID"];
    $obj->BranchID = $_SESSION["accounting"]["BranchID"];
    if ($obj->DocID == "") {
        $obj->RegDate = DateModules::Now();
        $obj->regPersonID = $_SESSION['USER']["PersonID"];
        $obj->DocDate = empty($obj->DocDate) ? PDONOW : $obj->DocDate;
        $return = $obj->Add();
    } else {
        $return = $obj->Edit();
    }
    if (!$return) {
        echo Response::createObjectiveResponse(false, ExceptionHandler::GetExceptionsToString());
        die;
    }
    /*$dt = PdoDataAccess::runquery("select count(*) from ACC_docs where DocID<? 
    		AND CycleID=" . $_SESSION["accounting"]["CycleID"] . 
    		" AND BranchID=" . $_SESSION["accounting"]["BranchID"] , array($obj->DocID));
    	echo Response::createObjectiveResponse(true, $dt[0][0] + 1);*/
    echo Response::createObjectiveResponse(true, "");
    die;
}
示例#2
0
function GetSavingLoanInfo()
{
    if (isset($_SESSION["USER"]["portal"])) {
        $PersonID = $_SESSION["USER"]["PersonID"];
    } else {
        $PersonID = $_REQUEST["PersonID"];
    }
    //----------- check for all docs confirm --------------
    /*$dt = PdoDataAccess::runquery("select group_concat(distinct LocalNo) from ACC_docs 
    		join ACC_DocItems using(DocID) join ACC_tafsilis t using(TafsiliType,TafsiliID)
    		where TafsiliType=" . TAFTYPE_PERSONS . " 
    			AND ObjectID = ? AND CostID in(" . COSTID_saving . ")
    			AND DocType not in(" . DOCTYPE_STARTCYCLE . "," . DOCTYPE_ENDCYCLE . ")
    			AND DocStatus not in('CONFIRM','ARCHIVE')", array($PersonID));
    	if(count($dt) > 0 && $dt[0][0] != "")
    	{
    		$msg = "اسناد با شماره های [" . $dt[0][0] . "] تایید نشده اند.";
    		echo dataReader::getJsonData(array(), 0, $_GET["callback"], $msg);
    		die();
    	}*/
    //------------ get sum of savings ----------------
    $dt = PdoDataAccess::runquery("\n\t\tselect DocDate,sum(CreditorAmount-DebtorAmount) amount\n\t\tfrom ACC_DocItems di\n\t\t\tjoin ACC_docs d using(DocID)\n\t\t\tjoin ACC_tafsilis t using(TafsiliType,TafsiliID)\n\t\t\n\t\twhere TafsiliType=" . TAFTYPE_PERSONS . " \n\t\t\tAND ObjectID = ?\n\t\t\tAND CostID in(" . COSTID_saving . ")\n\t\t\tAND DocType not in(" . DOCTYPE_STARTCYCLE . "," . DOCTYPE_ENDCYCLE . ")\n\t\t\tAND BranchID=" . $_SESSION["accounting"]["BranchID"] . "\n\t\tgroup by DocDate\n\t\torder by DocDate", array($PersonID));
    if (count($dt) == 0) {
        $msg = "شخص مورد نظر فاقد حساب پس انداز می باشد";
        echo dataReader::getJsonData(array(), 0, $_GET["callback"], $msg);
        die;
    }
    //------------ get the Deposite amount -------------
    $totalAmount = 0;
    $totalDays = 0;
    for ($i = 1; $i < count($dt); $i++) {
        $days = DateModules::GDateMinusGDate($dt[$i]["DocDate"], $dt[$i - 1]["DocDate"]);
        $totalDays += $days;
        $totalAmount += $dt[$i - 1]["amount"] * $days;
    }
    $days = DateModules::GDateMinusGDate(DateModules::Now(), $dt[$i - 1]["DocDate"]);
    $totalDays += $days;
    $totalAmount += $dt[$i - 1]["amount"] * $days;
    $average = round($totalAmount / $totalDays);
    $returnArray = array("PersonID" => $PersonID, "FirstDate" => DateModules::miladi_to_shamsi($dt[0]["DocDate"]), "AverageAmount" => $average, "TotalMonths" => floor($totalDays / 30.5));
    echo dataReader::getJsonData($returnArray, 1, $_GET["callback"]);
    die;
}
示例#3
0
            $d = round($total - $y * 365.25 - $m * 30.4375);
            $history .= "<td align=right colspan=3>سنوات غير قابل قبول : " . $y . " سال و " . $m . " ماه و " . $d . " روز" . "</td></tr>";
            //----------------------------------------------
            $tags = array('<!--history-->' => $history);
            $content = str_replace(array_keys($tags), array_values($tags), $content);
            echo $content;
            if (!isset($data[$i])) {
                break;
            }
            echo "<div class='pageBreak'></div>";
        }
        $prof1 = $prof2 = "";
        if ($data[$i][person_type] == HR_PROFESSOR) {
            $prof1 = '<tr><td style="background-color:#F0F3FF">مرتبه :</td><td style="font-weight:bold">' . $data[$i][science_level_title] . '</td>
						  <td style="background-color:#F0F3FF">پايه :</td><td style="font-weight:bold">' . $data[$i][base] . '</td></tr>';
            if ($data[$i][exe_to_date] == "" || $data[$i][exe_to_date] == "0000-00-00" || DateModules::CompareDate($data[$i][exe_to_date], DateModules::Now()) > 0) {
                $prof2 = '<tr><td style="background-color:#F0F3FF">سمت اجرايي :</td><td style="font-weight:bold">' . $data[$i][exe_post_title] . '</td>
							  <td style="background-color:#F0F3FF">تاريخ سمت اجرايي :</td><td style="font-weight:bold">' . DateModules::miladi_to_shamsi($data[$i][exe_from_date]) . '</td></tr>';
            } else {
                $prof2 = '<tr><td style="background-color:#F0F3FF">سمت اجرايي :</td><td style="font-weight:bold"></td>
							  <td style="background-color:#F0F3FF">تاريخ سمت اجرايي :</td><td style="font-weight:bold"></td></tr>';
            }
        }
        $tags = array('<!--post_title-->' => $data[$i][person_type] == HR_WORKER ? 'عنوان شغل' : 'عنوان پست', '<!--fname-->' => $data[$i][pfname], '<!--lname-->' => $data[$i][plname], '<!--father_name-->' => $data[$i][father_name], '<!--staff_id-->' => $data[$i][staff_id], '<!--birth_date-->' => DateModules::miladi_to_shamsi($data[$i][birth_date]), '<!--birth_place-->' => $data[$i][birth_place], '<!--idcard_no-->' => $data[$i][idcard_no], '<!--national_code-->' => $data[$i][national_code], '<!--prof1-->' => $prof1, '<!--worktime_type-->' => $data[$i][worktime_type_title], '<!--military_type-->' => $data[$i][military_type_title], '<!--education_level-->' => $data[$i][education_level_title], '<!--field_title-->' => $data[$i][sf_sb_title], '<!--doc_date-->' => DateModules::miladi_to_shamsi($data[$i][doc_date]), '<!--studyPlace-->' => $data[$i][study_palce], '<!--razm-->' => $data[$i][razmAmount], '<!--janbaz-->' => $data[$i][janbazAmount], '<!--unit-->' => $data[$i][unitName], '<!--emp_state-->' => $data[$i][emp_state_title], '<!--post_no-->' => $data[$i][post_no], '<!--last_post_title-->' => $data[$i][post_title], '<!--prof2-->' => $prof2, '<!--now-->' => DateModules::shNow());
        // مشخص کردن فایل template  مربوط به خلاصه پرونده
        $content = file_get_contents("../../reports/summary_doc.htm");
        $content = str_replace(array_keys($tags), array_values($tags), $content);
        $cur_staff = $data[$i][staff_id];
        $index = $i;
        $row_index = $i;
        $history = "";
}

$qry = " " ; 
$selectStr = "" ; 

if(!empty($_POST['HavePost']) && $_POST['HavePost'] == 1 ){
	
	$qry = "  LEFT  JOIN managmnt_extra_bylaw_items bi
							ON(p.post_id = bi.post_id)
			  LEFT  JOIN management_extra_bylaw b 
							ON(bi.bylaw_id = b.bylaw_id) " ; 	
	
	$selectStr = ", bi.value mng_value " ; 
	
	$where.= " AND (((b.from_date <= '".DateModules::Now()."' AND ( b.to_date >= '".DateModules::Now()."' OR b.to_date IS NULL OR b.to_date = '0000-00-00')) OR bi.post_id IS NULL)) AND
				((pep.to_date IS NULL OR pep.to_date = '0000-00-00' OR pep.to_date >='".DateModules::Now()."')) " ; 		
}

$query = " SELECT s.staff_id , ps.PersonID, ps.pfname, ps.plname,
					p.post_no ,p.post_id , p.title, g2j(pep.from_date) from_date , pep.to_date to_date ,
					CASE p.included WHEN 1 THEN 'بلي' WHEN NULL THEN 'خير' END included_title,
					bi1.Title post_type_title, p.ouid /* , concat(o1.ptitle, ',', o.ptitle ) full_path */ $selectStr

				FROM professor_exe_posts pep

						INNER JOIN position p
								ON (pep.post_id = p.post_id )

						INNER JOIN staff s
								ON (pep.staff_id = s.staff_id)
示例#5
0
                } else {
                    $prof2 = '<tr><td style="background-color:#F0F3FF">سمت اجرايي :</td><td style="font-weight:bold"></td>
							  <td style="background-color:#F0F3FF">تاريخ سمت اجرايي :</td><td style="font-weight:bold"></td></tr>';
                }
            }
            $ptitle = "";
            if ($valid_writs[$k - 1][person_type] == HR_WORKER) {
                $ptitle = 'عنوان شغل';
            } elseif ($valid_writs[$k - 1][person_type] == HR_PROFESSOR) {
                $ptitle = 'عنوان پست';
            } elseif ($valid_writs[$k - 1][person_type] == HR_EMPLOYEE) {
                $ptitle = 'عنوان حکم';
            }
            $tags = array('<!--post_title-->' => $ptitle, '<!--fname-->' => $valid_writs[$k - 1][pfname], '<!--lname-->' => $valid_writs[$k - 1][plname], '<!--father_name-->' => $valid_writs[$k - 1][father_name], '<!--staff_id-->' => $valid_writs[$k - 1][staff_id], '<!--birth_date-->' => DateModules::miladi_to_shamsi($valid_writs[$k - 1][birth_date]), '<!--birth_place-->' => $valid_writs[$k - 1][birth_place], '<!--idcard_no-->' => $valid_writs[$k - 1][idcard_no], '<!--national_code-->' => $valid_writs[$k - 1][national_code], '<!--prof1-->' => $prof1, '<!--worktime_type-->' => $valid_writs[$k - 1][worktime_type_title], '<!--military_type-->' => $valid_writs[$k - 1][military_type_title], '<!--education_level-->' => $valid_writs[$k - 1][education_level_title], '<!--field_title-->' => $valid_writs[$k - 1][sf_sb_title], '<!--doc_date-->' => DateModules::miladi_to_shamsi($valid_writs[$k - 1][doc_date]), '<!--studyPlace-->' => $valid_writs[$k - 1][study_palce], '<!--razm-->' => $valid_writs[$k - 1][razmAmount], '<!--janbaz-->' => $valid_writs[$k - 1][janbazAmount], '<!--unit-->' => $valid_writs[$k - 1][unitName], '<!--emp_state-->' => $valid_writs[$k - 1][emp_state_title], '<!--post_no-->' => $valid_writs[$k - 1][post_no], '<!--last_post_title-->' => $valid_writs[$k - 1][post_title], '<!--prof2-->' => $prof2, '<!--unit_Title-->' => $valid_writs[$k - 1][Unit_Title], '<!--caption-->' => $valid_writs[$k - 1][person_type] == HR_EMPLOYEE ? "عنوان حکم :" : "عنوان پست :", '<!--now-->' => DateModules::shNow());
            if (isset($_REQUEST['Param1']) && $_REQUEST['Param1'] == 2) {
                $TodayDate = DateModules::Now();
                $totalDay = DateModules::getDateDiff($TodayDate, $valid_writs[$k - 1][birth_date]);
                $yAge = (int) ($totalDay / 365.25);
                $mAge = (int) (($totalDay - $yAge * 365.25) / 30.4375);
                $dAge = round($totalDay - $yAge * 365.25 - $mAge * 30.4375);
                $report .= "<tr>\n\t\t\t\t\t\t\t<td>" . $valid_writs[$k - 1][staff_id] . "</td>\n\t\t\t\t\t\t\t<td>" . $valid_writs[$k - 1][pfname] . "</td>\n\t\t\t\t\t\t\t<td>" . $valid_writs[$k - 1][plname] . "</td>\n\t\t\t\t\t\t\t<td>" . DateModules::miladi_to_shamsi($valid_writs[$k - 1][birth_date]) . "</td>\n\t\t\t\t\t\t\t<td>" . $valid_writs[$k - 1][Unit_Title] . "</td> \n\t\t\t\t\t\t\t<td>" . $valid_writs[$k - 1][science_level_title] . "</td> \n\t\t\t\t\t\t\t<td>" . $valid_writs[$k - 1][national_code] . "</td>\n\t\t\t\t\t\t\t<td>" . $yAge . " سال و " . $mAge . " ماه و " . $dAge . " روز" . "</td>\n\t\t\t\t\t\t";
            }
            // مشخص کردن فایل template  مربوط به خلاصه پرونده
            if (isset($_REQUEST['Param1']) && $_REQUEST['Param1'] == 2) {
                $content = file_get_contents("../../reports/employment_history.htm");
            } else {
                $content = file_get_contents("../../reports/summary_doc.htm");
            }
            $content = str_replace(array_keys($tags), array_values($tags), $content);
            //......................................
            $keys = array_keys($history_row);
示例#6
0
 function AddMilitaryBase($PID)
 {
     $qry = " select * \r\n\t\t\t    from bases \r\n\t\t\t\twhere baseType = 1 and baseValue = 1 and   personid =" . $PID;
     $resRec = parent::runquery($qry);
     $query = "\tselect  personid ,\r\n\t\t\t\tif ((military_duration > (DATEDIFF( military_to_date ,military_from_date))/30.4375 ) ,military_duration , (DATEDIFF( military_to_date ,military_from_date))/30.4375 ) duration\r\n\r\n\t\t\t    from persons\r\n\t\t\t\twhere sex = 1 and person_type in (2,3,5) and personid = " . $PID;
     $res = parent::runquery($query);
     if ($res[0]['duration'] / 12 > 1 && count($resRec) == 0) {
         $this->PersonID = $PID;
         $this->BaseType = 1;
         $this->BaseValue = 1;
         $this->RegDate = DateModules::Now();
         $this->ExecuteDate = DateModules::Now();
         $this->BaseMode = 'SYSTEM';
         $this->ExtraInfo = $res[0]['duration'];
         $this->BaseStatus = 'NORMAL';
         $result = parent::insert($query, $this);
         if ($result === false) {
             return false;
         }
         $daObj = new DataAudit();
         $daObj->ActionType = DataAudit::Action_add;
         $daObj->MainObjectID = $this->PersonID;
         $daObj->SubObjectID = $this->BaseType;
         $daObj->TableName = "bases";
         $daObj->execute();
         return true;
     } else {
         if ($res[0]['duration'] / 12 < 1 && count($resRec) == 1) {
             $this->BaseStatus = 'DELETED';
             $result = parent::update("bases", $this, "BaseType = 1 and  BaseValue =1 and personid =" . $PID);
             if ($result === false) {
                 return false;
             }
             $daObj = new DataAudit();
             $daObj->ActionType = DataAudit::Action_update;
             $daObj->MainObjectID = $this->PersonID;
             $daObj->SubObjectID = $this->BaseStatus;
             $daObj->TableName = "bases";
             $daObj->execute();
             return true;
         } else {
             if ($res[0]['duration'] / 12 > 1 && count($resRec) == 1) {
                 if ($resRec[0]['BaseStatus'] == 'DELETED') {
                     $this->BaseStatus = 'NORMAL';
                     $result = parent::update("bases", $this, "BaseType = 1 and  BaseValue =1 and personid =" . $PID);
                     if ($result === false) {
                         return false;
                     }
                     $daObj = new DataAudit();
                     $daObj->ActionType = DataAudit::Action_update;
                     $daObj->MainObjectID = $this->PersonID;
                     $daObj->SubObjectID = $this->BaseStatus;
                     $daObj->TableName = "bases";
                     $daObj->execute();
                     return true;
                 } else {
                     return true;
                 }
             }
         }
     }
 }
示例#7
0
require_once '../request/request.class.php';
require_once '../request/request.data.php';

if(isset($_REQUEST["show"]))
{
	$RequestID = $_REQUEST["RequestID"];
	
	$dt = array();
	$returnArr = LON_requests::ComputePayments($RequestID, $dt);
	
	//............ get remain untill now ......................
	$PartObj = LON_ReqParts::GetValidPartObj($RequestID);
	$CurrentRemain = 0;
	foreach($dt as $row)
	{
		if($row["InstallmentDate"] <= DateModules::Now())
			$CurrentRemain = $row["TotalRemainder"];
	}
	//.........................................................
	
	$rpg = new ReportGenerator();
	$rpg->excel = !empty($_POST["excel"]);
	function dateRender($row, $val){
		return DateModules::miladi_to_shamsi($val);
	}	
	
	function amountRender($row, $val){
		return "<span dir=ltr>" . number_format($val) . "</span>";
	}
	
	$col = $rpg->addColumn("", "InstallmentID");
示例#8
0
$whereW = "";
$workDate = "";
$exitW = "";
if (!empty($_GET['fromDate'])) {
    // $workDate = " AND s.work_start_date >= '".DateModules::shamsi_to_miladi($_GET['fromDate'])."'" ;
    $whereW = " AND w.execute_date >= '" . DateModules::shamsi_to_miladi($_GET['fromDate']) . "'  ";
}
if (!empty($_GET['toDate'])) {
    $workDate .= " AND s.work_start_date <= '" . DateModules::shamsi_to_miladi($_GET['toDate']) . "'";
    $whereW .= " AND w.execute_date <= '" . DateModules::shamsi_to_miladi($_GET['toDate']) . "'";
    $exitW .= " AND w.execute_date <= '" . DateModules::shamsi_to_miladi($_GET['toDate']) . "'";
    $salaryDate = DateModules::shamsi_to_miladi($_GET['toDate']);
} else {
    $workDate .= " AND s.work_start_date <= '" . DateModules::Now() . "'";
    $exitW .= " AND w.execute_date <= '" . DateModules::Now() . "'";
    $salaryDate = DateModules::Now();
}
$title = "";
if (!empty($_GET['rasmiGh']) && $_GET['rasmiGh'] == 1) {
    $title = "گزارش کل کارکنان رسمی قطعی شاغل";
    $query = "  select  s.staff_id , p.pfname , p.plname , bi1.Title emp_state_title,bi2.Title emp_mode_title , bi3.Title person_type_title ,w.ouid\r\n                    from persons p inner join staff s\r\n                                       on p.personid = s.personid \r\n                              inner join (SELECT    staff_id,\r\n                                                    SUBSTRING_INDEX(SUBSTRING(max_execute_date,11),'.',1) writ_id,\r\n                                                    SUBSTRING_INDEX(max_execute_date,'.',-1) writ_ver\r\n                                                FROM (SELECT w.staff_id,\r\n                                                            max( CONCAT(w.execute_date,w.writ_id,'.',w.writ_ver) ) max_execute_date\r\n                                                        FROM writs w\r\n                                                                INNER JOIN staff ls\r\n                                                                        ON(w.staff_id = ls.staff_id)\r\n                                                        WHERE w.history_only = 0 " . $whereW . "\r\n                                                        GROUP BY w.staff_id)tbl2) tbl1\r\n                                             on s.staff_id = tbl1.staff_id \r\n                              inner join writs w\r\n                                       on tbl1.writ_id = w.writ_id and\r\n                                          tbl1.writ_ver = w.writ_ver and\r\n                                          tbl1.staff_id = w.staff_id\r\n                                    inner join Basic_Info bi1 on bi1.typeid = 3 and w.emp_state = bi1.infoid\r\n                                    inner join Basic_Info bi2 on bi2.typeid = 4 and w.emp_mode = bi2.infoid\r\n                                    inner join Basic_Info bi3 on bi3.typeid = 16 and s.person_type = bi3.infoid\r\n\r\n                        where w.emp_mode in(1,2,3,4,6,8,10,21) and s.person_type in (2) AND w.emp_state in (4)  {$whereW} ";
    $data = PdoDataAccess::runquery($query);
} else {
    if (!empty($_GET['rasmiAz']) && $_GET['rasmiAz'] == 1) {
        $title = "گزارش کل کارکنان رسمی آزمایشی شاغل";
        $query = "  select  s.staff_id , p.pfname , p.plname , bi1.Title emp_state_title,bi2.Title emp_mode_title , bi3.Title person_type_title ,w.ouid\r\n                    from persons p inner join staff s\r\n                                       on p.personid = s.personid \r\n                              inner join (SELECT    staff_id,\r\n                                                    SUBSTRING_INDEX(SUBSTRING(max_execute_date,11),'.',1) writ_id,\r\n                                                    SUBSTRING_INDEX(max_execute_date,'.',-1) writ_ver\r\n                                                FROM (SELECT w.staff_id,\r\n                                                            max( CONCAT(w.execute_date,w.writ_id,'.',w.writ_ver) ) max_execute_date\r\n                                                        FROM writs w\r\n                                                                INNER JOIN staff ls\r\n                                                                        ON(w.staff_id = ls.staff_id)\r\n                                                        WHERE w.history_only = 0 " . $whereW . "\r\n                                                        GROUP BY w.staff_id)tbl2) tbl1\r\n                                             on s.staff_id = tbl1.staff_id \r\n                              inner join writs w\r\n                                       on tbl1.writ_id = w.writ_id and\r\n                                          tbl1.writ_ver = w.writ_ver and\r\n                                          tbl1.staff_id = w.staff_id\r\n                                    inner join Basic_Info bi1 on bi1.typeid = 3 and w.emp_state = bi1.infoid\r\n                                    inner join Basic_Info bi2 on bi2.typeid = 4 and w.emp_mode = bi2.infoid\r\n                                    inner join Basic_Info bi3 on bi3.typeid = 16 and s.person_type = bi3.infoid\r\n\r\n                        where w.emp_mode in(1,2,3,4,6,8,10,21) and s.person_type in (2) AND w.emp_state in (3)  {$whereW} ";
        $data = PdoDataAccess::runquery($query);
    } else {
        if (!empty($_GET['Peymani']) && $_GET['Peymani'] == 1) {
            $title = "گزارش کل کارکنان پیمانی شاغل";
            $query = "  select  s.staff_id , p.pfname , p.plname , bi1.Title emp_state_title,bi2.Title emp_mode_title , bi3.Title person_type_title ,w.ouid\r\n                    from persons p inner join staff s\r\n                                       on p.personid = s.personid \r\n                              inner join (SELECT    staff_id,\r\n                                                    SUBSTRING_INDEX(SUBSTRING(max_execute_date,11),'.',1) writ_id,\r\n                                                    SUBSTRING_INDEX(max_execute_date,'.',-1) writ_ver\r\n                                                FROM (SELECT w.staff_id,\r\n                                                            max( CONCAT(w.execute_date,w.writ_id,'.',w.writ_ver) ) max_execute_date\r\n                                                        FROM writs w\r\n                                                                INNER JOIN staff ls\r\n                                                                        ON(w.staff_id = ls.staff_id)\r\n                                                        WHERE w.history_only = 0 " . $whereW . "\r\n                                                        GROUP BY w.staff_id)tbl2) tbl1\r\n                                             on s.staff_id = tbl1.staff_id \r\n                              inner join writs w\r\n                                       on tbl1.writ_id = w.writ_id and\r\n                                          tbl1.writ_ver = w.writ_ver and\r\n                                          tbl1.staff_id = w.staff_id\r\n                                    inner join Basic_Info bi1 on bi1.typeid = 3 and w.emp_state = bi1.infoid\r\n                                    inner join Basic_Info bi2 on bi2.typeid = 4 and w.emp_mode = bi2.infoid\r\n                                    inner join Basic_Info bi3 on bi3.typeid = 16 and s.person_type = bi3.infoid\r\n\r\n                        where w.emp_mode in(1,2,3,4,6,8,10,21) and s.person_type in (2) AND w.emp_state in (1,2,10)  {$whereW} ";
 private function process_subtract()
 {
     $this->moveto_curStaff($this->subtracts_rs, 'SUB');
     while ($this->subRowID <= $this->subRowCount && $this->subRow['staff_id'] == $this->cur_staff_id) {
         if (!$this->validate_salary_item_id($this->subRow['validity_start_date'], $this->subRow['validity_end_date'])) {
             $this->subRow = $this->subtracts_rs->fetch();
             $this->subRowID++;
             continue;
         }
         $key = $this->subRow['salary_item_type_id'];
         //اين متغير صرفا جهت افزايش خوانايي کد تعريف شده است
         $param1 = null;
         if ($this->subRow['subtract_type'] == FIX_BENEFIT) {
             $entry_title_full = 'pay_value';
             $entry_title_empty = 'get_value';
             if (DateModules::CompareDate($this->subRow['start_date'], $this->month_start) == 1) {
                 $s_date = $this->subRow['start_date'];
             } else {
                 $s_date = $this->month_start;
             }
             if (!$this->subRow['end_date'] || $this->subRow['end_date'] == '0000-00-00' || DateModules::CompareDate($this->subRow['end_date'], $this->month_end) != -1) {
                 $e_date = DateModules::shamsi_to_miladi($this->__YEAR . "/" . $this->__MONTH . "/30");
             } else {
                 $e_date = $this->subRow['end_date'];
             }
             $distance = round(DateModules::GDateMinusGDate($e_date, $s_date) + 1);
             if ($distance < 0) {
                 $this->subRow = $this->subtracts_rs->fetch();
                 $this->subRowID++;
                 continue;
             }
             if ($distance > $this->cur_work_sheet) {
                 $distance = $this->cur_work_sheet;
             }
             $this->subRow['get_value'] *= $distance / $this->__MONTH_LENGTH;
             //ضرب مزاياي ثابت در کارکرد ماهانه
         } else {
             $entry_title_full = 'get_value';
             $entry_title_empty = 'pay_value';
         }
         $Remainder = 0;
         if ($this->subRow['subtract_type'] == LOAN) {
             $multiply = -1;
             $param1 = "'LOAN'";
             $Remainder = $this->subRow['remainder'];
         } else {
             if ($this->subRow['subtract_type'] == FIX_FRACTION) {
                 $multiply = 1;
                 $param1 = "'FIX_FRACTION'";
                 $Remainder = $this->subRow['receipt'];
             } else {
                 $multiply = 0;
             }
         }
         $temp_array = array('pay_year' => $this->__YEAR, 'pay_month' => $this->__MONTH, 'staff_id' => $this->cur_staff_id, 'salary_item_type_id' => $key, $entry_title_full => $this->subRow['get_value'], $entry_title_empty => 0, 'param1' => $param1, 'param2' => $this->subRow['subtract_id'], 'param3' => NULL, 'param4' => $Remainder + $this->subRow['get_value'] * $multiply, 'cost_center_id' => $this->staffRow['cost_center_id'], 'payment_type' => NORMAL);
         if (DateModules::CompareDate(DateModules::Now(), $this->month_end) == -1) {
             $flow_date = DateModules::Now();
         } else {
             $flow_date = $this->month_end;
         }
         if (!$this->backpay) {
             /*	array_push($this->person_subtract_array,
             			array('subtract_id' => $this->subRow['subtract_id'] ,
             			'staff_id' => $this->cur_staff_id,
             			'subtract_type' => $this->subRow['subtract_type'],
             			'bank_id' => $this->subRow['bank_id'],
             			'first_value' => $this->subRow['first_value'],
             			'instalment' => $this->subRow['instalment'],
             			'remainder' => $this->subRow['remainder'] + $this->subRow['get_value'] * $multiply,
             			'start_date' => $this->subRow['start_date'],
             			'end_date' => $this->subRow['end_date'],
             			'comments' => $this->subRow['comments'],
             			'salary_item_type_id' => $this->subRow['salary_item_type_id'],
             			'account_no' => $this->subRow['account_no'],				
             			'loan_no' => $this->subRow['loan_no'],
             			'flow_date' => $flow_date,
             			'flow_time' => DateModules::CurrentTime(),
             			'subtract_status' => $this->subRow['subtract_status'],
             			'contract_no' => $this->subRow['contract_no']
             			)
             			);				
             			array_push($this->person_subtract_flow_array,
             			array('subtract_id' => $this->subRow['subtract_id'] ,
             			'row_no' => $this->subRow['subtract_flow_id'] + 1,
             			'flow_type' => CALCULATE_FICHE_FLOW_TYPE,
             			'flow_date' => $flow_date,
             			'flow_time' => DateModules::CurrentTime(),
             			'old_remainder' => $this->subRow['remainder'],
             			'new_remainder' => $this->subRow['remainder'] + $this->subRow['get_value']* $multiply,
             			'old_instalment' => $this->subRow['instalment'],
             			'new_instalment' => $this->subRow['instalment'],
             			'comments' => 'فيش حقوقي' 
             			)
             			);*/
         }
         if (isset($this->payment_items[$key])) {
             //قسط
             $this->payment_items[$key][$entry_title_full] += $temp_array[$entry_title_full];
             //مانده
             $this->payment_items[$key]['param4'] += $temp_array['param4'];
         } else {
             $this->payment_items[$key] = $temp_array;
         }
         $this->update_sums($this->subRow, $temp_array['pay_value']);
         $this->subRow = $this->subtracts_rs->fetch();
         $this->subRowID++;
     }
 }
示例#10
0
 static function CountRetMsg($where, $whereParam)
 {
     $retDate = DateModules::AddToGDate(DateModules::Now(), 0, 1);
     $query = " select count(*)\n\n\t\t\t\t\tfrom staff s inner join writs w\n\t\t\t\t\t\t\t\t\ton s.staff_id = w.staff_id and\n\t\t\t\t\t\t\t\t\t\ts.last_writ_id = w.writ_id and s.last_writ_ver = w.writ_ver and\n\t\t\t\t\t\t\t\t\t\tw.emp_mode != 13\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t inner join persons p\n\t\t\t\t\t\t\t\t\t\t\ton p.personid = s.personid\n\n\t\t\t\t\t\t\t\t inner join Basic_Info bi\n\t\t\t\t\t\t\t\t\t\t\ton bi.typeid = 28 and bi.infoID = s.retired_state ";
     $where .= " and s.retired_date < '" . $retDate . "' and\n\t\t\t\t  ( s.retired_date != '0000-00-00' or s.retired_date is null ) ";
     $temp = PdoDataAccess::runquery($query, $whereParam);
     return $temp[0][0];
 }
示例#11
0
<?php

//-------------------------
// programmer:	Jafarkhani
// Create Date:	95.01
//-------------------------
include '../header.inc.php';
include_once inc_dataGrid;
require_once 'traffic.class.php';
$dt = ATN_traffic::Get(" AND t.PersonID=? AND TrafficDate=?", array($_SESSION["USER"]["PersonID"], DateModules::Now()));
$even = $dt->rowCount() == 0 ? true : $dt->rowCount() % 2 == 0;
$StartPageFormat = isset($_REQUEST["StartPage"]) ? true : false;
?>
<style>
	.start {
		background-image: url('/HumanResources/icons/start.png');
		background-position: center center !important;
		background-size: 70px 70px;
		height: 80px !important;
		width: 80px !important;
	}
	.stop {
		background-image: url('/HumanResources/icons/stop.png');
		background-position: center center !important;
		background-size: 70px 70px;
		height: 80px !important;
		width: 80px !important;
	}
</style>
<script>
if (!empty($_POST['TINT:78']) && $_POST['TINT:78'] > 0 && $_POST['TINT:78'] < 41) {
    $to_base = $_POST['TINT:78'];
} else {
    $to_base = 40;
}
if (empty($_POST['SELECT:77']) || $_POST['SELECT:77'] == -1) {
    $from_science_level = 1;
    $to_science_level = 5;
} else {
    $from_science_level = $_POST['SELECT:77'];
    $to_science_level = $_POST['SELECT:77'];
}
$work_state_id = !empty($_POST['SELECT:93']) && $_POST['SELECT:93'] != '-1' ? $_POST['SELECT:93'] : '19';
$work_city_id = !empty($_POST['SELECT:94']) && $_POST['SELECT:94'] != '-1' ? $_POST['SELECT:94'] : '11';
$emp_state = 4;
$execute_date = !empty($_POST['FDATE:72']) ? DateModules::Shamsi_to_Miladi($_POST['FDATE:72']) : DateModules::Now();
$recordSet = compute_professors_salary_params($from_base, $to_base, $from_science_level, $to_science_level, $work_state_id, $work_city_id, $execute_date, $emp_state);
$content = "";
for ($i = 0; $i < count($recordSet); $i++) {
    $content .= "<tr><td>" . ($i + 1) . "</td>" . "<td>" . number_format(round($recordSet[$i]['total_sum'])) . "</td>" . "<td>" . number_format(round($recordSet[$i]['vijeh_extra'])) . "</td>" . "<td>" . number_format(round($recordSet[$i]['special_extra'])) . "</td>" . "<td>" . number_format(round($recordSet[$i]['absorb_extra'])) . "</td>" . "<td>" . number_format(round($recordSet[$i]['weather_bad_extra'])) . "</td>" . "<td>" . number_format(round($recordSet[$i]['base_salary'])) . "</td>" . "<td>" . $recordSet[$i]['base'] . "</td>" . "<td>" . $recordSet[$i]['science_level'] . "</td></tr>";
}
$tags = array('<!--data-->' => $content, '<!--now-->' => DateModules::shNow());
$content = file_get_contents("../../reports/proffesor_salary_param.html");
$content = str_replace(array_keys($tags), array_values($tags), $content);
echo $content;
die;
function compute_professors_salary_params($from_base, $to_base, $from_science_level, $to_science_level, $work_state_id, $work_city_id, $execute_date, $emp_state = EMP_STATE_APPROVED_CEREMONIOUS, $compute_heiat_omana_absorb_extra = true)
{
    $query = 'SELECT  validity_start_date,
    				validity_end_date,
    				salary_item_type_id
示例#13
0
function GetInstallments()
{
    $RequestID = $_REQUEST["RequestID"];
    $temp = array();
    $dt = LON_requests::ComputePayments($RequestID, $temp);
    $currentPay = 0;
    foreach ($dt as $row) {
        if ($row["InstallmentDate"] < DateModules::Now() && $row["TotalRemainder"] * 1 > 0) {
            $currentPay += $row["TotalRemainder"] * 1;
        }
    }
    echo dataReader::getJsonData($temp, count($temp), $_GET["callback"], $currentPay);
    die;
}
示例#14
0
}
if (!empty($_POST['TDATE:72'])) {
    $whereDate .= " AND tbl2.execute_date<='" . DateModules::shamsi_to_miladi($_POST['TDATE:72']) . "'";
    $whereW .= " AND w.execute_date <= '" . DateModules::shamsi_to_miladi($_POST['TDATE:72']) . "'";
    $salaryDate = DateModules::shamsi_to_miladi($_POST['TDATE:72']);
    $toDate = $_POST['TDATE:72'];
} else {
    $salaryDate = DateModules::Now();
    $toDate = DateModules::shNow();
}
if (!empty($_POST['TDATE:72'])) {
    $workDate .= " AND s.work_start_date <= '" . DateModules::shamsi_to_miladi($_POST['TDATE:72']) . "'";
    $exitW = " AND w.execute_date <= '" . DateModules::shamsi_to_miladi($_POST['TDATE:72']) . "'";
} else {
    $workDate .= " AND s.work_start_date <= '" . DateModules::Now() . "'";
    $exitW = " AND w.execute_date <= '" . DateModules::Now() . "'";
}
$query = "        \r\n        \r\nselect count(*) cn , w.emp_state , s.person_type\r\n               from persons p inner join staff s\r\n                                       on p.personid = s.personid\r\n                              inner join (SELECT    staff_id,\r\n                                                    SUBSTRING_INDEX(SUBSTRING(max_execute_date,11),'.',1) writ_id,\r\n                                                    SUBSTRING_INDEX(max_execute_date,'.',-1) writ_ver\r\n                                                FROM (SELECT w.staff_id,\r\n                                                            max( CONCAT(w.execute_date,w.writ_id,'.',w.writ_ver) ) max_execute_date\r\n                                                        FROM writs w\r\n                                                                INNER JOIN staff ls\r\n                                                                        ON(w.staff_id = ls.staff_id)\r\n                                                        WHERE w.history_only = 0 " . $whereW . "\r\n                                                        GROUP BY w.staff_id)tbl2) tbl1\r\n                                             on s.staff_id = tbl1.staff_id \r\n                              inner join writs w\r\n                                       on tbl1.writ_id = w.writ_id and\r\n                                          tbl1.writ_ver = w.writ_ver and\r\n                                          tbl1.staff_id = w.staff_id\r\n\r\n            where w.emp_mode in(1,2,3,4,6,8,10,16,21) and s.person_type in (2,3,5) " . $whereW . "\r\n\r\n            group by s.person_type , w.emp_state ";
$data = PdoDataAccess::runquery($query);
$total = 0;
$rasmi_ghatee_count = 0;
$peymani_count = 0;
$rasmi_azmayeshi_count = 0;
$tarh_count = 0;
$roozmozd_count = 0;
$gharardadi_count = 0;
for ($i = 0; $i < count($data); $i++) {
    $total += $data[$i]['cn'];
    if ($data[$i]['person_type'] == 2 && ($data[$i]['emp_state'] == 1 || $data[$i]['emp_state'] == 2 || $data[$i]['emp_state'] == 10)) {
        $peymani_count += $data[$i]['cn'];
    }
示例#15
0
function selectArrearTransferWrits()
{
    MakeAdvanceSearchWhere($where, $whereParam);
    $state;
    $state = isset($_REQUEST["return"]) ? "1" : "0";
    $stateWhere = "";
    $stateWhere = " w.arrear = " . $state . " AND ";
    $curYear = DateModules::GetYear(DateModules::miladi_to_shamsi(DateModules::Now()));
    $query = "select w.writ_id,\n                     w.writ_ver,\n                     w.staff_id,\n                     w.ouid,\n                     w.issue_date,\n                     w.history_only,\n                     w.corrective,\n                     w.execute_date,\n                     concat(wt.title,' - ', wst.title) as wt_title,\n                     bi_emp_state.title as emp_state_title,\n                     w.ref_letter_no,\n                     w.ref_letter_date,\n                     w.person_type,\n                     concat(p.pfname, ' ', p.plname) fullname,\n                     w.corrective_writ_id,\n                     w.correct_completed,\n\t\t\t\t\t w.view_flag\n\t\t\t\t\n\t\t\t\tfrom staff s\n                              \n        \t\t  LEFT OUTER JOIN writs w ON (w.staff_id = s.staff_id)\n                  LEFT OUTER JOIN writ_types wt ON ((w.writ_type_id = wt.writ_type_id) AND (w.person_type = wt.person_type))\n                  LEFT OUTER JOIN writ_subtypes wst ON (w.writ_subtype_id = wst.writ_subtype_id AND w.writ_type_id = wst.writ_type_id \n                  \t\t\t\t\t\t\t\t\t\t\tAND w.person_type = wst.person_type)\n                  LEFT OUTER JOIN persons p ON (s.PersonID = p.PersonID)\n                  LEFT OUTER JOIN org_new_units o ON (w.ouid = o.ouid)\n                  LEFT JOIN Basic_Info bi_emp_state on(bi_emp_state.TypeID=3 and w.emp_state=bi_emp_state.InfoID)\n                  LEFT JOIN payment_writs pw ON pw.writ_id = w.writ_id and pw.writ_ver = w.writ_ver and pw.staff_id = w.staff_id \n\t\t\t\t  \n\t\t\twhere w.execute_date >= '" . TRANSFER_WRIT_EXE_DATE . "' AND w.state = 3 AND  \n\t\t\t\t  w.execute_date < '" . str_replace("/", "-", DateModules::shamsi_to_miladi($curYear . "/01/01")) . "'  AND\t\t\t\t \n\t\t\t\t  substr(g2j(w.execute_date),1,4) < substr(g2j(writ_recieve_date),1,4) AND \n\t\t\t\t {$stateWhere}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n                s.person_type in (" . manage_access::getValidPersonTypes() . ") AND w.cost_center_id in (" . manage_access::getValidCostCenters() . ") AND\n\t\t\t\tw.emp_state <> 0 AND\n\t\t\t\t(w.history_only=0 OR w.history_only IS NULL) AND \n\t\t\t\t(w.dont_transfer = 0 OR w.dont_transfer IS NULL) AND\n                ( pw.writ_id is null ) AND\n\t\t\t\t(w.correct_completed!=" . WRIT_CORRECTING . ") AND " . $where . "\n\t\t\t\n\t\t\torder by p.plname,p.pfname,s.staff_id,w.execute_date,w.writ_id,w.writ_ver";
    $temp = PdoDataAccess::runquery($query, $whereParam);
    /*if($_SESSION['UserID'] == 'jafarkhani') {
    	echo PdoDataAccess::GetLatestQueryString(); 
    	die(); 
    }*/
    for ($i = 0; $i < count($temp); $i++) {
        $temp[$i]['full_unit_title'] = manage_units::get_full_title($temp[$i]['ouid']);
    }
    echo dataReader::getJsonData($temp, count($temp), $_GET["callback"]);
    die;
}
示例#16
0
function InsertData()
{
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding('utf-8');
    $data->setRowColOffset(0);
    $data->read($_FILES["attach"]["tmp_name"]);
    $FileType = $_POST["FileType"];
    $obj = new manage_pay_get_lists();
    $MissionObj = new manage_mission_list_items();
    $PGIObj = new manage_pay_get_list_items();
    $log_obj = new manage_group_pay_get_log();
    $success_count = 0;
    $unsuccess_count = 0;
    $costId = "";
    if ($FileType == EXTRA_WORK_LIST) {
        for ($i = 1; $i < $data->sheets[0]['numRows']; $i++) {
            //for ($j = 0; $j < $data->sheets[0]['numCols']; $j++)
            //$data->sheets[0]['cells'][$i][$j];
            if (!isset($data->sheets[0]['cells'][$i][0]) && !isset($data->sheets[0]['cells'][$i][1])) {
                break;
            }
            $query = " select p.pfname , p.plname , s.person_type from staff s inner join persons p on s.personid = p.personid\n\t\t\t\t\twhere staff_id =" . $data->sheets[0]['cells'][$i][1];
            $result = PdoDataAccess::runquery($query);
            if ($costId != $data->sheets[0]['cells'][$i][0]) {
                $obj->list_id = null;
                $obj->cost_center_id = $data->sheets[0]['cells'][$i][0];
                $obj->list_date = DateModules::Now();
                $obj->doc_state = 1;
                $obj->list_type = EXTRA_WORK_LIST;
                if ($obj->AddList() === false) {
                    $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][1], $result[0]["pfname"] . " " . $result[0]["plname"], " کد مرکز هزینه نامعتبر است.");
                    $unsuccess_count++;
                    continue;
                }
                $costId = $obj->cost_center_id;
            }
            if (count($result) > 0) {
                $pt = $result[0]["person_type"];
                if ($pt == 3) {
                    $salaryItemId = 152;
                } elseif ($pt == 2) {
                    $salaryItemId = 39;
                } elseif ($pt == 5) {
                    $salaryItemId = 639;
                }
                $PGIObj->staff_id = $data->sheets[0]['cells'][$i][1];
                $PGIObj->salary_item_type_id = $salaryItemId;
                $PGIObj->approved_amount = $data->sheets[0]['cells'][$i][2];
                $PGIObj->comments = $data->sheets[0]['cells'][$i][3];
                $PGIObj->list_id = $obj->GetLastID("pay_get_lists", "list_id", " list_type = 1 and cost_center_id =" . $obj->cost_center_id);
                $PGIObj->list_row_no = $PGIObj->GetLastID("pay_get_list_items", "list_row_no", " list_id =" . $PGIObj->list_id) + 1;
                if ($PGIObj->Add() == false) {
                    $log_obj->make_unsuccess_rows($PGIObj->staff_id);
                    $unsuccess_count++;
                }
            } else {
                $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][1], " ", "شماره شناسایی نامعتبر است.");
                $unsuccess_count++;
            }
        }
        $log_obj->finalize();
        $st = preg_replace('/\\r\\n/', "", $log_obj->make_result());
        echo "{success:true,data:'" . $st . "'}";
        die;
    } elseif ($FileType == MISSION_LIST) {
        for ($i = 1; $i < $data->sheets[0]['numRows']; $i++) {
            //for ($j = 0; $j < $data->sheets[0]['numCols']; $j++)
            //$data->sheets[0]['cells'][$i][$j];
            $query = " select p.pfname , p.plname , s.person_type from staff s inner join persons p on s.personid = p.personid\n\t\t\t\t\twhere staff_id =" . $data->sheets[0]['cells'][$i][1];
            $result = PdoDataAccess::runquery($query);
            if ($costId != $data->sheets[0]['cells'][$i][0]) {
                $obj->list_id = null;
                $obj->cost_center_id = $data->sheets[0]['cells'][$i][0];
                $obj->list_date = DateModules::Now();
                $obj->doc_state = 1;
                $obj->list_type = MISSION_LIST;
                if ($obj->AddList() === false) {
                    $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][1], $result[0]["pfname"] . " " . $result[0]["plname"], " کد مرکز هزینه نامعتبر است.");
                    $unsuccess_count++;
                    continue;
                }
                $costId = $obj->cost_center_id;
            }
            if (count($result) > 0) {
                $pt = $result[0]["person_type"];
                if ($pt == 1) {
                    $salaryItemId = 42;
                } elseif ($pt == 2) {
                    $salaryItemId = 43;
                } elseif ($pt == 3) {
                    $salaryItemId = 10315;
                } elseif ($pt == 5) {
                    $salaryItemId = 643;
                }
                $MissionObj->staff_id = $data->sheets[0]['cells'][$i][1];
                $MissionObj->doc_no = $data->sheets[0]['cells'][$i][2];
                $MissionObj->doc_date = DateModules::shamsi_to_miladi($data->sheets[0]['cells'][$i][3]);
                $MissionObj->from_date = DateModules::shamsi_to_miladi($data->sheets[0]['cells'][$i][4]);
                $MissionObj->to_date = DateModules::shamsi_to_miladi($data->sheets[0]['cells'][$i][5]);
                $MissionObj->duration = $data->sheets[0]['cells'][$i][6];
                $MissionObj->travel_cost = isset($data->sheets[0]['cells'][$i][7]) ? $data->sheets[0]['cells'][$i][7] : "";
                $MissionObj->destination = $data->sheets[0]['cells'][$i][8];
                $MissionObj->using_facilities = isset($data->sheets[0]['cells'][$i][9]) ? $data->sheets[0]['cells'][$i][9] : "";
                //     $MissionObj->report_summary =  (isset($data->sheets[0]['cells'][$i][11])) ? $data->sheets[0]['cells'][$i][11] : "" ;
                $MissionObj->comments = isset($data->sheets[0]['cells'][$i][12]) ? $data->sheets[0]['cells'][$i][12] : "";
                $MissionObj->region_coef = isset($data->sheets[0]['cells'][$i][10]) ? $data->sheets[0]['cells'][$i][10] : "";
                $MissionObj->salary_item_type_id = $salaryItemId;
                $MissionObj->list_id = $obj->GetLastID("pay_get_lists", "list_id", " list_type = 9 and cost_center_id =" . $obj->cost_center_id);
                $MissionObj->list_row_no = $MissionObj->GetLastID("mission_list_items", "list_row_no", " list_id =" . $MissionObj->list_id) + 1;
                if ($MissionObj->Add() == false) {
                    $log_obj->make_unsuccess_rows($MissionObj->staff_id, $result[0]["pfname"] . " " . $result[0]["plname"], "اطلاعات مربوط  به این فرد معتبر نمی باشد.");
                    $unsuccess_count++;
                }
            } else {
                $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][1], " ", "شماره شناسایی نامعتبر است.");
                $unsuccess_count++;
            }
        }
        $log_obj->finalize();
        $st = preg_replace('/\\r\\n/', "", $log_obj->make_result());
        echo "{success:true,data:'" . $st . "'}";
        die;
    } elseif ($FileType == 11) {
        //.... محاسبه باقیمانده وامها ..........
        $Arr = preg_split('/[\\/]/', DateModules::shNow());
        $LYear = $Arr[0];
        $LMonth = $Arr[1];
        manage_subtracts::GetRemainder("", "", "", true, $LMonth, $LYear);
        //......................................
        $pdo = PdoDataAccess::getPdoObject();
        $pdo->beginTransaction();
        $DB = "";
        //echo  $data->sheets[0]['numRows'].'----'			  ; die() ;
        for ($i = 1; $i < $data->sheets[0]['numRows']; $i++) {
            $subObj = new manage_subtracts();
            $subFlowObj = new manage_subtract_flows();
            if (!isset($data->sheets[0]['cells'][$i][1])) {
                $log_obj->make_unsuccess_rows('-', '-', 'ردیف ' . ($i + 1) . ' معتبر نمی باشد.');
                $unsuccess_count++;
                continue;
            }
            // آیا این قلم وجود دارد ؟......................................
            $qry = " select salary_item_type_id , available_for\n\t\t\t\t\t\t\tfrom salary_item_types where salary_item_type_id=" . $data->sheets[0]['cells'][$i][1];
            $resItem = PdoDataAccess::runquery($qry);
            //..............................................................
            if (isset($resItem[0]['salary_item_type_id']) && $resItem[0]['salary_item_type_id'] > 0) {
                if (empty($data->sheets[0]['cells'][$i][0])) {
                    $log_obj->make_unsuccess_rows('-', $data->sheets[0]['cells'][$i][1], 'لطفا شماره شناسایی ردیف ' . ($i + 1) . '  را وارد نمایید.');
                    $unsuccess_count++;
                    continue;
                }
                // قلم مربوط به وام نبوده است ...............................
                if ($data->sheets[0]['cells'][$i][2] == 1 && $resItem[0]['available_for'] != 1) {
                    $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], " قلم مربوط به وام نمی باشد. ");
                    $unsuccess_count++;
                    continue;
                }
                if ($data->sheets[0]['cells'][$i][2] == 2 && !($resItem[0]['available_for'] == 4 || $resItem[0]['available_for'] == 5)) {
                    $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], " قلم مربوط به کسور نمی باشد. ");
                    $unsuccess_count++;
                    continue;
                }
                if ($data->sheets[0]['cells'][$i][2] == 1 && !empty($data->sheets[0]['cells'][$i][6]) && $data->sheets[0]['cells'][$i][6] != 0 && !empty($data->sheets[0]['cells'][$i][5]) && $data->sheets[0]['cells'][$i][5] != 0 && $data->sheets[0]['cells'][$i][6] > $data->sheets[0]['cells'][$i][5]) {
                    $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], 'قسط وام مورد نظر از مبلغ اوليه آن بزرگتر است.');
                    $unsuccess_count++;
                    continue;
                }
                if (!empty($data->sheets[0]['cells'][$i][8]) && DateModules::GetDateFormat($data->sheets[0]['cells'][$i][7]) > DateModules::GetDateFormat($data->sheets[0]['cells'][$i][8])) {
                    $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], 'تاريخ پايان بايد بزرگتر و يا مساوي تاريخ شروع باشد.');
                    $unsuccess_count++;
                    continue;
                }
                if (empty($data->sheets[0]['cells'][$i][3])) {
                    $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], 'نوع وام/کسور مشخص نشده است.');
                    $unsuccess_count++;
                    continue;
                }
                if (!empty($data->sheets[0]['cells'][$i][4])) {
                    $qry = "select bank_id from banks where branch_code=" . $data->sheets[0]['cells'][$i][4];
                    $resbank = PdoDataAccess::runquery($qry);
                    if (count($resbank) == 0) {
                        $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], 'کد بانک معتبر نمی باشد.');
                        $unsuccess_count++;
                        continue;
                    }
                }
                $qry = " select staff_id,PersonID from staff where staff_id =" . $data->sheets[0]['cells'][$i][0];
                $resStaff = PdoDataAccess::runquery($qry);
                if (count($resStaff) == 0) {
                    $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], ' شماره شناسایی معتبر نمی باشد.');
                    $unsuccess_count++;
                    continue;
                }
                //..............................................................................
                $Arr2 = preg_split('/[\\/]/', DateModules::GetDateFormat($data->sheets[0]['cells'][$i][7]));
                $sfd = (int) $Arr2[0] . "/" . (int) $Arr2[1] . "/" . (int) $Arr2[2];
                if (!empty($data->sheets[0]['cells'][$i][8])) {
                    $Arr3 = preg_split('/[\\/]/', DateModules::GetDateFormat($data->sheets[0]['cells'][$i][8]));
                    $efd = (int) $Arr3[0] . "/" . (int) $Arr3[1] . "/" . (int) $Arr3[2];
                }
                //...........................................................................
                $Arr = preg_split('/[\\/]/', DateModules::GetDateFormat($data->sheets[0]['cells'][$i][7]));
                $sdate = $edate = '';
                $start_day = "";
                $start_month = (int) $Arr[1];
                if ($start_month < 7) {
                    $day = 31;
                } elseif ($start_month < 12) {
                    $day = 30;
                } elseif ($start_month == 12) {
                    $day = 29;
                }
                $sd = (int) $Arr[0] . "/" . (int) $Arr[1] . "/01";
                $ed = (int) $Arr[0] . "/" . (int) $Arr[1] . "/" . $day;
                $sdate = DateModules::shamsi_to_miladi($sd);
                $edate = DateModules::shamsi_to_miladi($ed);
                $PID = $resStaff[0]['PersonID'];
                //ثبت وام یا کسور جدید..................................................
                if ($data->sheets[0]['cells'][$i][3] == 1) {
                    $qry = " select subtract_id, remainder, instalment  \n\t\t\t\t\t\t\t\t\tfrom person_subtracts \n\t\t\t\t\t\t\t\t\t\twhere salary_item_type_id = " . $data->sheets[0]['cells'][$i][1] . " and\n\t\t\t\t\t\t\t\t\t\t\t  PersonID =" . $PID . " AND IsFinished = 0 and \n\t\t\t\t\t\t\t\t\t\t\t  start_date <= '" . str_replace("/", "-", $sdate) . "' and \n\t\t\t\t\t\t\t\t\t\t\t  ( end_date >= '" . str_replace("/", "-", $edate) . "' OR end_date IS NULL OR end_date = '0000-00-00' ) ";
                    $res = PdoDataAccess::runquery($qry);
                    if (count($res) > 0 && $res[0]['subtract_id'] > 0) {
                        $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], "-", "این /کسور قبلا در سیستم ثبت گردیده است.");
                        $unsuccess_count++;
                        continue;
                    }
                    //.......................................................
                    $subObj->PersonID = $PID;
                    $subObj->subtract_type = $data->sheets[0]['cells'][$i][2] == 1 ? LOAN : FIX_FRACTION;
                    $subObj->bank_id = !empty($data->sheets[0]['cells'][$i][4]) ? $resbank[0]['bank_id'] : "";
                    $subObj->first_value = !empty($data->sheets[0]['cells'][$i][5]) ? $data->sheets[0]['cells'][$i][5] : 0;
                    $subObj->instalment = !empty($data->sheets[0]['cells'][$i][6]) ? $data->sheets[0]['cells'][$i][6] : 0;
                    $subObj->remainder = !empty($data->sheets[0]['cells'][$i][5]) ? $data->sheets[0]['cells'][$i][5] : 0;
                    $subObj->start_date = DateModules::shamsi_to_miladi($sfd);
                    $subObj->end_date = !empty($data->sheets[0]['cells'][$i][8]) ? DateModules::shamsi_to_miladi($efd) : "";
                    $subObj->loan_no = !empty($data->sheets[0]['cells'][$i][9]) ? $data->sheets[0]['cells'][$i][9] : "";
                    $subObj->contract_no = !empty($data->sheets[0]['cells'][$i][10]) ? $data->sheets[0]['cells'][$i][10] : "";
                    $subObj->salary_item_type_id = $data->sheets[0]['cells'][$i][1];
                    $subObj->reg_date = DateModules::NowDateTime();
                    //Isfinished = 0 ;
                    if ($subObj->Add() === false) {
                        $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], "-", " خطا ");
                        $unsuccess_count++;
                        continue;
                    }
                }
                // ثبت گردش ...................................................
                if ($data->sheets[0]['cells'][$i][3] == 2) {
                    $qry = " select psf.subtract_id \n\t\t\t\t\t\t\t\t\tfrom person_subtracts  ps inner join person_subtract_flows psf \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ton  ps.subtract_id = psf.subtract_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\twhere ps.salary_item_type_id = " . $data->sheets[0]['cells'][$i][1] . " and\n\t\t\t\t\t\t\t\t\t\t\t  ps.PersonID =" . $PID . " and \n\t\t\t\t\t\t\t\t\t\t\t  psf.flow_date >= '" . str_replace("/", "-", $sdate) . "' and \n\t\t\t\t\t\t\t\t\t\t\t  psf.flow_date <= '" . str_replace("/", "-", $edate) . "'";
                    $res = PdoDataAccess::runquery($qry);
                    if (count($res) > 0 && $res[0]['subtract_id'] > 0) {
                        //echo PdoDataAccess::GetLatestQueryString() ; die();
                        $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], "-", " این گردش قبلا در سیستم ثبت گردیده است.");
                        $unsuccess_count++;
                        continue;
                    }
                    //.................................................................
                    $qry = " select ps.subtract_id, ts.remainder, ps.instalment  \n\t\t\t\t\t\t\t\t\tfrom person_subtracts ps  left join tmp_SubtractRemainders ts \n\t\t\t\t\t\t\t\t\t                               on ps.subtract_id = ts.subtract_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t   \n\t\t\t\t\t\t\t\t\t\twhere ps.salary_item_type_id = " . $data->sheets[0]['cells'][$i][1] . " and\n\t\t\t\t\t\t\t\t\t\t\t  ps.PersonID =" . $PID . " AND ps.IsFinished = 0  AND ps.start_date <= '" . str_replace("/", "-", $sdate) . "' AND  \n\t\t\t\t\t\t\t\t\t\t\t( ps.end_date >= '" . str_replace("/", "-", $edate) . "' OR ps.end_date IS NULL OR ps.end_date = '0000-00-00' ) ";
                    $res = PdoDataAccess::runquery($qry);
                    //	echo PdoDataAccess::GetLatestQueryString() ;
                    if (count($res) > 0 && $res[0]['subtract_id'] > 0) {
                        $new_remainder = $new_instalment = 0;
                        if ($data->sheets[0]['cells'][$i][2] == 1) {
                            $subFlowObj->subtract_id = $res[0]['subtract_id'];
                            $subFlowObj->flow_type = REGISTER_NEW_FLOW_TYPE;
                            $subFlowObj->flow_date = DateModules::NowDateTime();
                            $subFlowObj->flow_coaf = !empty($data->sheets[0]['cells'][$i][5]) && $data->sheets[0]['cells'][$i][5] * 1 > $res[0]['remainder'] * 1 ? -1 : 1;
                            $subFlowObj->amount = !empty($data->sheets[0]['cells'][$i][5]) && $data->sheets[0]['cells'][$i][5] * 1 > $res[0]['remainder'] * 1 ? $data->sheets[0]['cells'][$i][5] * 1 - $res[0]['remainder'] * 1 : $res[0]['remainder'] * 1 - $data->sheets[0]['cells'][$i][5] * 1;
                            $subFlowObj->newRemainder = !empty($data->sheets[0]['cells'][$i][5]) ? $data->sheets[0]['cells'][$i][5] : 0;
                            $subFlowObj->comments = "گردش دستی";
                            if ($subFlowObj->Add() == false) {
                                $log_obj->make_unsuccess_rows($subObj->staff_id);
                                $unsuccess_count++;
                                continue;
                            } else {
                                $new_remainder = !empty($data->sheets[0]['cells'][$i][5]) ? $data->sheets[0]['cells'][$i][5] : 0;
                                $new_instalment = !empty($data->sheets[0]['cells'][$i][6]) ? $data->sheets[0]['cells'][$i][6] : 0;
                                $qry = " update person_subtracts \n\t\t\t\t\t\t\t\t\t\t\tset\t\tremainder = " . $new_remainder . ",\n\t\t\t\t\t\t\t\t\t\t\t\t\tinstalment = " . $new_instalment . ",\n\t\t\t\t\t\t\t\t\t\t\t\t\treg_date = '" . DateModules::NowDateTime() . "'\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\twhere subtract_id =" . $subFlowObj->subtract_id;
                                PdoDataAccess::runquery($qry);
                            }
                        } else {
                            //echo "*****"; die() ;
                            $new_instalment = !empty($data->sheets[0]['cells'][$i][6]) ? $data->sheets[0]['cells'][$i][6] : 0;
                            $qry = " update person_subtracts \n\t\t\t\t\t\t\t\t\t\tset\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tinstalment = " . $new_instalment . ",\n\t\t\t\t\t\t\t\t\t\t\t\treg_date = '" . DateModules::NowDateTime() . "'\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\twhere subtract_id =" . $res[0]['subtract_id'];
                            PdoDataAccess::runquery($qry);
                        }
                    } else {
                        $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], "این وام / کسور ثبت سیستم نشده است.");
                        $unsuccess_count++;
                        continue;
                    }
                }
            } else {
                $log_obj->make_unsuccess_rows($data->sheets[0]['cells'][$i][0], $data->sheets[0]['cells'][$i][1], "کد قلم معتبر نمی باشد.");
                $unsuccess_count++;
                continue;
            }
        }
        $log_obj->finalize();
        $st = preg_replace('/\\r\\n/', "", $log_obj->make_result());
        if ($unsuccess_count > 0) {
            $pdo->rollBack();
        } else {
            $pdo->commit();
        }
        echo "{success:true,data:'" . $st . "'}";
        die;
    }
}
示例#17
0
function DeletePersonShift()
{
    $obj = new ATN_PersonShifts($_POST["RowID"]);
    if ($obj->FromDate < DateModules::Now()) {
        echo Response::createObjectiveResponse(false, "این ردیف در تردد استفاده شده و قابل حذف نمی باشد");
        die;
    }
    $result = $obj->Remove();
    //print_r(ExceptionHandler::PopAllExceptions());
    echo Response::createObjectiveResponse($result, ExceptionHandler::GetExceptionsToString());
    die;
}
示例#18
0
    public static function get_arrear_document($staff_id, $pay_year, $pay_month)
    {
        for ($t = $_POST['from_pay_year']; $t < $_POST['to_pay_year'] + 1; $t++) {
            $retCoef = 1;
            $qry = " select max(arrear_ver) MV\r\n\t\t\t\t\tfrom  corrective_payment_writs \r\n\t\t\t\t\t\twhere staff_id = " . $SID . " and pay_year = " . $t . "\r\n\t\t       ";
            $MaxVer = PdoDataAccess::runquery($qry);
            if (count($MaxVer) == 0 || $MaxVer[0]['MV'] == 0) {
                continue;
            }
            $qry = " select  cpw.staff_id , cpw.writ_id ,  cpw.writ_ver , cpw.arrear_ver , w.execute_date, w.send_letter_no , w.salary_pay_proc\r\n\t\t\r\n\t\t\t\t from corrective_payment_writs cpw inner join  writs w \r\n\t\t\t                                         on cpw.staff_id = w.staff_id and \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcpw.writ_id = w.writ_id and \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcpw.writ_ver = w.writ_ver \r\n\r\n\t\t\t where cpw.pay_year = " . $t . " and cpw.staff_id = " . $SID . " and arrear_ver = " . $MaxVer[0]['MV'] . " and cpw.pay_month = 12 \r\n\t\t\t order by  w.execute_date ";
            $res1 = PdoDataAccess::runquery($qry);
            //............................. پیدا کردن آخرین ماهی که فیش حقوقی در آن محاسبه شده است ................
            $qry = " select max(pay_month) PM from payment_writs where staff_id = " . $SID . " AND pay_year= " . $t;
            $MaxMonth = PdoDataAccess::runquery($qry);
            if ($MaxMonth[0]['PM'] > 0 && $MaxMonth[0]['PM'] < 7) {
                $LastDate = $t . "/" . $MaxMonth[0]['PM'] . "/31";
            } else {
                if ($MaxMonth[0]['PM'] > 6 && $MaxMonth[0]['PM'] < 12) {
                    $LastDate = $t . "/" . $MaxMonth[0]['PM'] . "/30";
                } else {
                    if ($MaxMonth[0]['PM'] == 12) {
                        $LastDate = $t . "/" . $MaxMonth[0]['PM'] . "/29";
                    } else {
                        $LastDate = '0000-00-00';
                    }
                }
            }
            $LAST_PAY_DATE = date('Y-m-d', strtotime(DateModules::shamsi_to_miladi($LastDate) . "+1 days"));
            $LAST_PAY_DATE = DateModules::miladi_to_shamsi($LAST_PAY_DATE);
            if ($res1[count($res1) - 1]['salary_pay_proc'] == 1) {
                $LastDate = DateModules::miladi_to_shamsi($res1[count($res1) - 1]['execute_date']);
                $arr = preg_split('/\\//', $LastDate);
                $NewDate = date('Y-m-d', strtotime(DateModules::shamsi_to_miladi($LastDate) . "-1 days"));
                $LastDate = DateModules::miladi_to_shamsi($NewDate);
                $arr = preg_split('/\\//', $LastDate);
            }
            $LD = array();
            //.................................................................................................
            for ($i = 0; $i < count($res1); $i++) {
                if ($LastDate != '0000-00-00' && DateModules::CompareDate($res1[$i]['execute_date'], str_replace("/", "-", DateModules::shamsi_to_miladi($LastDate))) >= 0) {
                    $LD[$t]['lastDate'] = $LastDate;
                    break;
                }
                $CDate = DateModules::miladi_to_shamsi($res1[$i]['execute_date']);
                $arr2 = preg_split('/\\//', $CDate);
                if (intval($arr2[1]) <= intval($MaxMonth[0]['PM'])) {
                    $qry = " select t.staff_id,max_execute_date ,SUBSTRING(max_execute_date,1,10) execute_date ,\r\n\t\t\t\t\t\tSUBSTRING_INDEX(SUBSTRING(max_execute_date,11),'.',1) writ_id,\r\n\t\t\t\t\t\tSUBSTRING_INDEX(max_execute_date,'.',-1) writ_ver\r\n\r\n\t\t\t\t\tfrom (\r\n\t\t\t\t\t\t\tselect w.staff_id,max( CONCAT(w.execute_date,w.writ_id,'.',w.writ_ver) ) max_execute_date\r\n\r\n\t\t\t\t\t\t\tfrom payment_writs cpw inner join  writs w\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ton  cpw.staff_id = w.staff_id and\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcpw.writ_id = w.writ_id and\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcpw.writ_ver = w.writ_ver\r\n\t\t\t\t\t\t\twhere cpw.pay_year = " . $t . " and cpw.staff_id = " . $SID . " and\r\n\t\t\t\t\t\t\t      /*cpw.pay_month = 12 and*/ execute_date <= '" . $res1[$i]['execute_date'] . "'\r\n\r\n\t\t\t\t\t\t\tgroup by w.staff_id\r\n\t\t\t\t\t\t) t\r\n\t\t\t\t\t\t\t";
                    // پرس و جو بالا هم بایستی union شود با ورژن های قبلی پرداخت تا احکام آنها هم دیده شود .
                    $res2 = PdoDataAccess::runquery($qry);
                    if (count($res2) == 0) {
                        $res2[0]['execute_date'] = '0000-00-00';
                        $res2[0]['writ_id'] = 0;
                        $res2[0]['writ_ver'] = 0;
                    }
                } else {
                    $res2[0]['execute_date'] = '0000-00-00';
                    $res2[0]['writ_id'] = 0;
                    $res2[0]['writ_ver'] = 0;
                }
                /* PdoDataAccess::runquery(" insert compare_arrear_writs (staff_id ,current_execute_date , current_writ_id , current_writ_ver, 
                															   prev_execute_date , prev_writ_id , prev_writ_ver , arrear_ver , pay_year ) values 
                															  (" . $res1[$i]['staff_id'] . ",'" . $res1[$i]['execute_date'] . "'," . $res1[$i]['writ_id'] . "," .
                                    $res1[$i]['writ_ver'] . ",'" . $res2[0]['execute_date'] . "'," . $res2[0]['writ_id'] . "," .
                                    $res2[0]['writ_ver'] . "," . $res1[$i]['arrear_ver'] . "," . $t . " ) ");
                			*/
                if ($res1[$i]['writ_id'] == $res2[0]['writ_id'] && $res1[$i]['writ_ver'] == $res2[0]['writ_ver']) {
                    continue;
                }
                $writNo++;
            }
            //..................اگر برج 12 در دیون محاسبه می شود ولی در قبلی نبوده است بایستی به جدول compare افزوده شود..............................
            /*   if ($res1[(count($res1) - 1)]['salary_pay_proc'] != 1 && $MaxMonth[0]['PM'] < 12) {
            
            
            
                        $qry = " select staff_id , execute_date , writ_id , writ_ver 
                            from writs 
                             where  staff_id = " . $SID . " and salary_pay_proc = 1 and 
                                    execute_date >= '" . DateModules::shamsi_to_miladi($t . '/01/01') . "' and 
                                    execute_date <= '" . DateModules::shamsi_to_miladi($t . '/12/29') . "' and 
                                    issue_date >= '" . $res1[$i - 1]['execute_date'] . "' and state = 3 ";
            
                        $res3 = PdoDataAccess::runquery($qry);
            
                        PdoDataAccess::runquery(" insert compare_arrear_writs ( staff_id ,current_execute_date , current_writ_id , current_writ_ver, 
                                                                    prev_execute_date , prev_writ_id , prev_writ_ver , arrear_ver , pay_year ) values 
                                                                  (" . $SID . ",'" . $res1[$i - 1]['execute_date'] . "'," . $res1[$i - 1]['writ_id'] . "," .
                                $res1[$i - 1]['writ_ver'] . ",'" . $res3[0]['execute_date'] . "'," . $res3[0]['writ_id'] . "," .
                                $res3[0]['writ_ver'] . "," . $res1[$i - 1]['arrear_ver'] . "," . $t . " ) ");
                    } */
            //....................we need this part......................
            $res = PdoDataAccess::runquery(" select * \r\n\t\t\t\t\t\t\t\t\t\tfrom compare_arrear_writs \r\n\t\t\t\t\t\t\t\t\t\t\twhere staff_id = " . $SID . " and pay_year =" . $t . " and arrear_ver = " . $MaxVer[0]['MV']);
            for ($i = 0; $i < count($res); $i++) {
                $writsWhereClause .= ' (wsi.writ_id=' . $res[$i]['current_writ_id'] . ' AND wsi.writ_ver=' . $res[$i]['current_writ_ver'] . ' AND wsi.staff_id=' . $res[$i]['staff_id'] . ') OR 
							 (wsi.writ_id=' . $res[$i]['prev_writ_id'] . ' AND wsi.writ_ver=' . $res[$i]['prev_writ_ver'] . ' AND wsi.staff_id=' . $res[$i]['staff_id'] . ' ) OR  ';
                $PrewritsWhereClause .= ' (wsi.writ_id=' . $res[$i]['prev_writ_id'] . ' AND wsi.writ_ver=' . $res[$i]['prev_writ_ver'] . ' AND wsi.staff_id=' . $res[$i]['staff_id'] . ' ) OR  ';
                $CurrwritsWhereClause .= ' (wsi.writ_id=' . $res[$i]['current_writ_id'] . ' AND wsi.writ_ver=' . $res[$i]['current_writ_ver'] . ' AND wsi.staff_id=' . $res[$i]['staff_id'] . ') OR ';
            }
            //.............................................................
        }
        $writsWhereClause = substr($writsWhereClause, 0, strlen($writsWhereClause) - 4);
        $PrewritsWhereClause = substr($PrewritsWhereClause, 0, strlen($PrewritsWhereClause) - 4);
        $CurrwritsWhereClause = substr($CurrwritsWhereClause, 0, strlen($CurrwritsWhereClause) - 4);
        $ResITM2 = PdoDataAccess::runquery(" select distinct wsi.salary_item_type_id  , sit.print_title ,sit.month_length_effect\r\n\t\t\t\t\t\t\t\t\t\t\t from writ_salary_items wsi \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinner join salary_item_types sit \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ton  wsi.salary_item_type_id  = sit.salary_item_type_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twhere " . $writsWhereClause);
        //..............................................................................
        $ResITM = array();
        $diffVal = 0;
        for ($j = 0; $j < count($ResITM2); $j++) {
            $res6 = PdoDataAccess::runquery(" select wsi.salary_item_type_id , sit.print_title , sum(wsi.value) CurrVal \r\n\t\t\t\t\t\t\t\t\t\t\t from writ_salary_items wsi \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinner join salary_item_types sit \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ton  wsi.salary_item_type_id  = sit.salary_item_type_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twhere wsi.must_pay = 1 and (" . $CurrwritsWhereClause . ") and wsi.salary_item_type_id =" . $ResITM2[$j]['salary_item_type_id']);
            $res7 = PdoDataAccess::runquery(" select wsi.salary_item_type_id , sit.print_title , sum(wsi.value) PreVal \r\n\t\t\t\t\t\t\t\t\t\t\t from writ_salary_items wsi \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinner join salary_item_types sit \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ton  wsi.salary_item_type_id  = sit.salary_item_type_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twhere  wsi.must_pay = 1 and (" . $PrewritsWhereClause . ") and wsi.salary_item_type_id =" . $ResITM2[$j]['salary_item_type_id']);
            $diffVal = $res6[0]['CurrVal'] - $res7[0]['PreVal'];
            if ($diffVal != 0) {
                $diffVal = 0;
                $ResITM[] = array('salary_item_type_id' => $ResITM2[$j]['salary_item_type_id'], 'print_title' => $ResITM2[$j]['print_title'], 'month_length_effect' => $ResITM2[$j]['month_length_effect']);
            } else {
                //.................................... چنانچه قلمی در حکم فعلی حذف شده باشد.................
                for ($i = 0; $i < count($res); $i++) {
                    $res6 = PdoDataAccess::runquery(' select wsi.salary_item_type_id , sit.print_title , sum(wsi.value) CurrVal 
                                                        from writ_salary_items wsi 
                                                                    inner join salary_item_types sit 
                                                                                    on  wsi.salary_item_type_id  = sit.salary_item_type_id
                                                                    where wsi.must_pay = 1 and 
                                                                         (wsi.writ_id=' . $res[$i]['prev_writ_id'] . ' AND 
                                                                          wsi.writ_ver=' . $res[$i]['prev_writ_ver'] . ' AND
                                                                          wsi.staff_id=' . $res[$i]['staff_id'] . ' ) and 
                                                                          wsi.salary_item_type_id =' . $ResITM2[$j]['salary_item_type_id']);
                    $res7 = PdoDataAccess::runquery(' select wsi.salary_item_type_id , sit.print_title , sum(wsi.value) PreVal 
                                                        from writ_salary_items wsi 
                                                                inner join salary_item_types sit 
                                                                        on  wsi.salary_item_type_id  = sit.salary_item_type_id
                                                        where  wsi.must_pay = 1 and 
                                                              (wsi.writ_id=' . $res[$i]['current_writ_id'] . ' AND 
                                                               wsi.writ_ver=' . $res[$i]['current_writ_ver'] . ' AND 
                                                               wsi.staff_id=' . $res[$i]['staff_id'] . ') and 
                                                               wsi.salary_item_type_id =' . $ResITM2[$j]['salary_item_type_id']);
                    if (count($res6) != count($res7) || $res6[0]['CurrVal'] != $res7[0]['PreVal']) {
                        if (!in_array($ResITM2[$j]['salary_item_type_id'], $ResITM)) {
                            $ResITM[] = array('salary_item_type_id' => $ResITM2[$j]['salary_item_type_id'], 'print_title' => $ResITM2[$j]['print_title'], 'month_length_effect' => $ResITM2[$j]['month_length_effect']);
                        }
                    }
                }
            }
        }
        //..........................................................................
        $TotalsumDiff = $TotalMainVal = $TotalRowTax = $TotalRowIns = $TotalRowRet = $TotalPay = 0;
        for ($t = $_POST['from_pay_year']; $t < $_POST['to_pay_year'] + 1; $t++) {
            $retCoef = 1;
            $qry = " select max(arrear_ver) MV\r\n\t\t\t\t\tfrom  corrective_payment_writs \r\n\t\t\t\t\t\twhere staff_id = " . $SID . " and pay_year = " . $t . "\r\n\t\t       ";
            $MaxVer = PdoDataAccess::runquery($qry);
            if (count($MaxVer) == 0 || $MaxVer[0]['MV'] == 0) {
                continue;
            }
            $res = PdoDataAccess::runquery(" select * \r\n\t\t\t\t\t\t\t\t\t\tfrom compare_arrear_writs \r\n\t\t\t\t\t\t\t\t\t\t\twhere staff_id = " . $SID . " and pay_year =" . $t . " and arrear_ver = " . $MaxVer[0]['MV']);
            $prior_execute_date = $current_execute_date = $prior_writ_type = $current_writ_type = '';
            $current_writ_items = $prior_writ_items = array();
            $sdate = "";
            for ($i = 0; $i < count($res); $i++) {
                if ($res[$i]['current_writ_id'] == $res[$i]['prev_writ_id'] && $res[$i]['current_writ_ver'] == $res[$i]['prev_writ_ver']) {
                    continue;
                }
                if (!empty($LD[$t]['lastDate'])) {
                    $toDate = $LD[$t]['lastDate'];
                } else {
                    if ($LastDate == '0000-00-00') {
                        $toDate = $t . "/12/30";
                    } else {
                        $toDate = DateModules::CompareDate(str_replace("/", "-", DateModules::shamsi_to_miladi($t . "/12/30")), str_replace("/", "-", DateModules::shamsi_to_miladi($LastDate))) >= 0 ? $LastDate : $t . "/12/30";
                    }
                }
                /* if ($sdate != "" && $sdate > '0000-00-00')
                       $Row .= "<td>" . $sdate . "</td>";
                   else
                       $Row .= "<td>" .DateModules::miladi_to_shamsi($res[$i]['current_execute_date']). "</td>";
                   */
                if ($res[$i]['current_execute_date'] == $res[$i + 1]['current_execute_date']) {
                    //$Row .= "<td>" . DateModules::AddToJDate($toDate, 1) . "</td>";
                    $sdate = DateModules::AddToJDate($toDate, 1);
                }
                /*else if ($sdate != "" && $sdate > '0000-00-00' && empty($res[$i + 1]['current_execute_date']))
                                $Row .= "<td>" . $t . "/12/29" . "</td>";
                            elseif($res[$i + 1]['current_execute_date'] !='0000-00-00' && DateModules::CompareDate(DateModules::miladi_to_shamsi($res[$i + 1]['current_execute_date']),$LAST_PAY_DATE) == 1  )
                            {
                                  $Row .= "<td>" . $LAST_PAY_DATE . "</td>";
                                
                            }
                            else
                                $Row .= "<td>" . ( empty($res[$i + 1]['current_execute_date']) ? $toDate : DateModules::miladi_to_shamsi($res[$i + 1]['current_execute_date']) ) . "</td>";
                */
                if (!empty($LD[$t]['lastDate'])) {
                    $toDate2 = DateModules::shamsi_to_miladi(DateModules::AddToJDate($LD[$t]['lastDate'], 1));
                } else {
                    if ($LastDate == '0000-00-00') {
                        $toDate2 = DateModules::shamsi_to_miladi($t + 1 . "/01/01");
                    } else {
                        $toDate2 = DateModules::CompareDate(str_replace("/", "-", DateModules::shamsi_to_miladi($t . "/12/30")), str_replace("/", "-", DateModules::shamsi_to_miladi($LastDate))) >= 0 ? DateModules::AddToJDate($LastDate, 1) : DateModules::shamsi_to_miladi($t + 1 . "/01/01");
                    }
                }
                $endDate = empty($res[$i + 1]['current_execute_date']) ? $toDate2 : $res[$i + 1]['current_execute_date'];
                if ($res[$i]['current_execute_date'] == $res[$i + 1]['current_execute_date']) {
                    $endDate = $toDate2;
                }
                if ($sdate != "" && $sdate > '0000-00-00' && empty($res[$i + 1]['current_execute_date'])) {
                    $endDate = $t + 1 . "/1/01";
                    if ($resPerInfo[0]['person_type'] == 3) {
                        $DayNo = round(DateModules::GDateMinusGDate(DateModules::shamsi_to_miladi($endDate), DateModules::shamsi_to_miladi($sdate)));
                        $DayNo2 = calculate_duration($sdate, $endDate);
                    } else {
                        $DayNo = calculate_duration($sdate, $endDate);
                    }
                } else {
                    if ($resPerInfo[0]['person_type'] == 3) {
                        $DayNo = round(DateModules::GDateMinusGDate(DateModules::shamsi_to_miladi($endDate), $res[$i]['current_execute_date']));
                        $DayNo2 = calculate_duration($res[$i]['current_execute_date'], $endDate);
                    } else {
                        $DayNo = calculate_duration($res[$i]['current_execute_date'], $endDate);
                    }
                }
                if ($res[$i + 1]['current_execute_date'] != '0000-00-00' && DateModules::CompareDate(DateModules::miladi_to_shamsi($res[$i + 1]['current_execute_date']), $LAST_PAY_DATE) == 1) {
                    $DayNo = calculate_duration($res[$i]['current_execute_date'], DateModules::shamsi_to_miladi($LAST_PAY_DATE));
                }
                // $Row .= "<td>" . $DayNo . "</td>";
                $sumDiff = $MainVal = 0;
                $RetInc = $TaxInc = $InsInc = 0;
                for ($j = 0; $j < count($ResITM); $j++) {
                    $val1 = get_writSalaryItem_value($res[$i]["current_writ_id"], $res[$i]["current_writ_ver"], $res[$i]["staff_id"], $ResITM[$j]["salary_item_type_id"]);
                    $val2 = get_writSalaryItem_value($res[$i]["prev_writ_id"], $res[$i]["prev_writ_ver"], $res[$i]["staff_id"], $ResITM[$j]["salary_item_type_id"]);
                    $RetRes = PdoDataAccess::runquery(" select retired_include , tax_include , insure_include \r\n                                                      from salary_item_types where salary_item_type_id = " . $ResITM[$j]["salary_item_type_id"]);
                    //  $Row .= "<td>" . CurrencyModulesclass::toCurrency($val1 - $val2) . (($val1 - $val2) < 0 ? "-&nbsp;" : "" ) . "</td>";
                    $sumDiff += $val1 - $val2;
                    if (empty($Itm[$j]['sumVal'])) {
                        $Itm[$j]['sumVal'] = 0;
                        $Itm[$j]['sumCol'] = 0;
                    }
                    $Itm[$j]['sumVal'] += $val1 - $val2;
                    if ($ResITM[$j]["month_length_effect"] == 0 && $resPerInfo[0]['person_type'] == 3) {
                        $Itm[$j]['sumCol'] += round(($val1 - $val2) * $DayNo2 / 30);
                        $MainVal += round(($val1 - $val2) * $DayNo2 / 30);
                    } elseif ($resPerInfo[0]['person_type'] == 5 && $_SESSION['UserID'] == 'jafarkhani') {
                        // echo $endDate . "---<br>" ;
                        // echo DateModules::miladi_to_shamsi($res[$i]['current_execute_date'])."***<br>" ; die();
                        $arr3 = preg_split('/\\//', DateModules::miladi_to_shamsi($res[$i]['current_execute_date']));
                        $arr4 = preg_split('/\\//', DateModules::miladi_to_shamsi($endDate));
                        if ($arr4[1] * 1 == 1 && $arr4[0] == $arr3[0] + 1) {
                            $EP = 12;
                        } else {
                            $EP = $arr4[1] * 1;
                        }
                        //.........................
                        $std = $res[$i]['current_execute_date'];
                        $stMonth = $arr3[1] * 1;
                        if ($stMonth < 7) {
                            $endt = $arr3[0] . "/" . $arr3[1] . "/31";
                        } elseif (6 < $stMonth && $stMonth < 12) {
                            $endt = $arr3[0] . "/" . $arr3[1] . "/30";
                        } elseif ($stMonth == 12) {
                            $endt = $arr3[0] . "/" . $arr3[1] . "/29";
                        }
                        for ($k = $arr3[1] * 1; $k < $EP + 1; $k++) {
                            if (DateModules::CompareDate(DateModules::miladi_to_shamsi($endt), DateModules::miladi_to_shamsi($endDate)) < 1) {
                                $DYNo = round(DateModules::GDateMinusGDate(DateModules::shamsi_to_miladi($endt), $std)) + 1;
                                if ($stMonth < 7) {
                                    $mNO = 31;
                                } elseif ($stMonth > 6 && $stMonth < 12) {
                                    $mNO = 30;
                                } elseif ($stMonth == 12) {
                                    $mNO = 29;
                                }
                                $Itm[$j]['sumCol'] += round(($val1 - $val2) * $DYNo / $mNO);
                                $MainVal += round(($val1 - $val2) * $DYNo / $mNO);
                                $TaxInc += round(($val1 - $val2) * $DYNo / $mNO);
                                //........................
                                $std = DateModules::shamsi_to_miladi($arr3[0] . "/" . ($k + 1) . "/01");
                                $stMonth = $k + 1;
                                //$arr3[1] + 1;
                                if ($stMonth < 7) {
                                    $endt = $arr3[0] . "/" . $stMonth . "/31";
                                } elseif (6 < $stMonth && $stMonth < 12) {
                                    $endt = $arr3[0] . "/" . $stMonth . "/30";
                                } elseif ($stMonth == 12) {
                                    $endt = $arr3[0] . "/" . $stMonth . "/29";
                                }
                            } else {
                                //echo "****";
                                // die();
                                $endt = $endDate;
                                $DYNo = round(DateModules::GDateMinusGDate(DateModules::shamsi_to_miladi($endt), $std));
                                if ($stMonth < 7) {
                                    $mNO = 31;
                                } elseif ($stMonth > 6 && $stMonth < 12) {
                                    $mNO = 30;
                                } elseif ($stMonth == 12) {
                                    $mNO = 29;
                                }
                                $Itm[$j]['sumCol'] += round(($val1 - $val2) * $DYNo / $mNO);
                                $MainVal += round(($val1 - $val2) * $DYNo / $mNO);
                                $TaxInc += round(($val1 - $val2) * $DYNo / $mNO);
                                break;
                            }
                        }
                    } else {
                        $Itm[$j]['sumCol'] += round(($val1 - $val2) * $DayNo / 30);
                        $MainVal += round(($val1 - $val2) * $DayNo / 30);
                    }
                    //...............................
                    if ($RetRes[0]['retired_include'] == 1) {
                        $RetInc += $val1 - $val2;
                    }
                    if ($RetRes[0]['tax_include'] == 1 && $resPerInfo[0]['person_type'] != 5) {
                        if ($ResITM[$j]["month_length_effect"] == 0 && $resPerInfo[0]['person_type'] == 3) {
                            $TaxInc += round(($val1 - $val2) * $DayNo2 / 30);
                        } else {
                            $TaxInc += round(($val1 - $val2) * $DayNo / 30);
                        }
                    }
                    if ($RetRes[0]['insure_include'] == 1) {
                        $InsInc += $val1 - $val2;
                    }
                }
                //$MainVal = round(($sumDiff) * $DayNo / 30);
                //....................مالیات...........
                $qry = " select count(*) cn  \r\n\t\t\t\t\tfrom Arrear_payment_items \r\n\t\t\t\t\t\twhere staff_id = " . $SID . " and pay_year = " . $t . " and pay_month  = 12 and salary_item_type_id in (146,147,148,747)";
                $res4 = PdoDataAccess::runquery($qry);
                if ($res4[0]['cn'] > 0) {
                    //.........................................
                    $qry = " select count(*) cnp\r\n            from payments \r\n               where staff_id = " . $SID . " and pay_year = " . $t;
                    $resE = PdoDataAccess::runquery($qry);
                    if ($resE[0]['cnp'] == 0) {
                        $sdatetax = DateModules::shamsi_to_miladi($t . "/12/29");
                        $qry = " SELECT tti.from_value\r\n                FROM staff_tax_history sth\r\n                        inner join tax_tables tt on sth.tax_table_type_id = tt.tax_table_type_id\r\n                        inner join tax_table_items tti on tti.tax_table_id = tt.tax_table_id\r\n\r\n                WHERE sth.staff_id = " . $SID . " and \r\n                    sth.start_date < '" . DateModules::Now() . "' and\r\n                    ( sth.end_date = '0000-00-00' or sth.end_date is null or \r\n                    sth.end_date > '" . DateModules::Now() . "' ) and\r\n                    tt.from_date < '" . $sdatetax . "' and\r\n                    ( tt.to_date = '0000-00-00' or tt.to_date is null or tt.to_date >= '" . $sdatetax . "'  ) and coeficient = 0.1 ";
                        $resFval = PdoDataAccess::runquery($qry);
                        $TaxInc -= $resFval[0]['from_value'];
                    }
                    //.........................................
                    $RowTax = $TaxInc * 0.1;
                    //round(($TaxInc * $DayNo / 30) * 0.1);
                } else {
                    $RowTax = 0;
                }
                //..................................
                $qry = " select count(*) cn  \r\n\t\t\t\t\tfrom Arrear_payment_items \r\n\t\t\t\t\t\twhere staff_id = " . $SID . " and pay_year = " . $t . " and pay_month  = 12 and salary_item_type_id in (149 , 150)";
                $res3 = PdoDataAccess::runquery($qry);
                if ($res3[0]['cn'] > 0) {
                    $RowRet = round($RetInc * $DayNo / 30 * 0.09);
                } else {
                    $RowRet = 0;
                }
                //.......................بیمه تامین اجتماعی...........
                $qry = " select count(*) cn  \r\n\t\t\t\t\tfrom Arrear_payment_items \r\n\t\t\t\t\t\twhere staff_id = " . $SID . " and pay_year = " . $t . " and pay_month  = 12 and salary_item_type_id in (144,145,744,9920)";
                $res5 = PdoDataAccess::runquery($qry);
                if ($res5[0]['cn'] > 0) {
                    $RowInsure = round($InsInc * $DayNo / 30 * 0.07000000000000001);
                } else {
                    $RowInsure = 0;
                }
                //.....................................
                if ($resPerInfo[0]['last_retired_pay'] != NULL && $resPerInfo[0]['last_retired_pay'] != '0000-00-00' && DateModules::CompareDate($resPerInfo[0]['last_retired_pay'], DateModules::shamsi_to_miladi($t . "/01/01")) == -1) {
                    $RowRet = $retCoef = 0;
                }
                $TotalsumDiff += $sumDiff;
                $TotalMainVal += $MainVal;
                $TotalRowTax += $RowTax;
                $TotalRowRet += $RowRet;
                $TotalRowIns += $RowInsure;
                $TotalPay += $MainVal - ($RowTax + $RowRet + $RowInsure);
                /* $Row .= "<td>" . ( ($sumDiff < 0 ) ? CurrencyModulesclass::toCurrency($sumDiff) . "-" : CurrencyModulesclass::toCurrency($sumDiff)) . "</td>
                		 <td>" . (($MainVal < 0 ) ? CurrencyModulesclass::toCurrency($MainVal) . "-" : CurrencyModulesclass::toCurrency($MainVal)) . "</td><td>" .
                                  (($RowTax < 0 ) ? CurrencyModulesclass::toCurrency($RowTax) . "-" : CurrencyModulesclass::toCurrency($RowTax)) . "</td><td>" .
                                  (($RowRet < 0 ) ? CurrencyModulesclass::toCurrency($RowRet) . "-" : CurrencyModulesclass::toCurrency($RowRet)) . "</td><td>" .
                                  (($RowInsure < 0 ) ? CurrencyModulesclass::toCurrency($RowInsure) . "-" : CurrencyModulesclass::toCurrency($RowInsure)) . "</td><td>" .
                                  ((($MainVal - ($RowTax + $RowRet + $RowInsure )) < 0 ) ? CurrencyModulesclass::toCurrency(($MainVal - ($RowTax + $RowRet + $RowInsure))) . "-" : CurrencyModulesclass::toCurrency(($MainVal - ($RowTax + $RowRet + $RowInsure)))) . "</td></tr>"; */
            }
            //   $Row .= "</tr>";
        }
    }
示例#19
0
                    $ManagerScore += $myear * 5;
                } elseif ($prevKindS == 4 || $prevKindS == 5) {
                    $ManagerScore += $myear * 4;
                }
            }

            $prevKindS = $res4[$k]['SupervisionKind'];
            $prevExe = $res4[$k]['execute_date'];
        }
    }

    //..........................................................................		

    if ($res4[$k - 1]['SupervisionKind'] > 0) {

        $DiffDay = DateModules::GDateMinusGDate(DateModules::Now(), $prevExe);
        DateModules::day_to_ymd($DiffDay, $myear, $mmonth, $mday);

        if ($myear >= 1) {
            if ($prevKindS == 1) {
                $ManagerScore += $myear * 8;
            } elseif ($prevKindS == 2) {
                $ManagerScore += $myear * 7;
            } elseif ($prevKindS == 3) {
                $ManagerScore += $myear * 5;
            } elseif ($prevKindS == 4 || $prevKindS == 5) {
                $ManagerScore += $myear * 4;
            }
        }
    }
示例#20
0
 private static function ComputePaymentsBaseOnInstallment($RequestID, &$installments, $pdo = null)
 {
     $returnArr = array();
     $pays = PdoDataAccess::runquery("\r\n\t\t\tselect substr(p.PayDate,1,10) PayDate, sum(PayAmount) PayAmount, sum(PayAmount) FixPayAmount\r\n\t\t\t\tfrom LON_BackPays p\r\n\t\t\t\tleft join ACC_IncomeCheques i using(IncomeChequeID)\r\n\t\t\t\tleft join BaseInfo bi on(bi.TypeID=6 AND bi.InfoID=p.PayType)\r\n\t\t\t\twhere RequestID=? AND \r\n\t\t\t\t\tif(p.PayType=" . BACKPAY_PAYTYPE_CHEQUE . ",i.ChequeStatus=" . INCOMECHEQUE_VOSUL . ",1=1)\r\n\r\n\t\t\t\tgroup by substr(PayDate,1,10)\r\n\t\t\t\torder by substr(PayDate,1,10)", array($RequestID), $pdo);
     $PayRecord = count($pays) == 0 ? null : $pays[0];
     $payIndex = 1;
     $Forfeit = 0;
     for ($i = 0; $i < count($installments); $i++) {
         if ($installments[$i]["IsDelayed"] == "YES") {
             continue;
         }
         $forfeitDays = 0;
         $installments[$i]["CurForfeitAmount"] = 0;
         $installments[$i]["ForfeitAmount"] = 0;
         $installments[$i]["ForfeitDays"] = 0;
         $installments[$i]["remainder"] = 0;
         $installments[$i]["FixPayAmount"] = 0;
         $installments[$i]["PayAmount"] = 0;
         $installments[$i]["UsedPayAmount"] = 0;
         $installments[$i]["PayDate"] = '';
         if ($PayRecord == null) {
             $installments[$i]["TotalRemainder"] = $i == 0 ? 0 : $installments[$i - 1]["TotalRemainder"];
             $ToDate = DateModules::Now();
             $amount = $installments[$i]["InstallmentAmount"];
             $forfeitDays = DateModules::GDateMinusGDate($ToDate, $installments[$i]["InstallmentDate"]);
             $CurForfeit = round($amount * $installments[$i]["ForfeitPercent"] * $forfeitDays / 36500);
             if ($installments[$i]["InstallmentDate"] < $ToDate) {
                 $installments[$i]["ForfeitDays"] = $forfeitDays;
                 $Forfeit += $CurForfeit;
                 $installments[$i]["ForfeitAmount"] = $Forfeit;
                 $installments[$i]["CurForfeitAmount"] = $CurForfeit;
                 $installments[$i]["remainder"] = $amount;
                 $installments[$i]["TotalRemainder"] += $amount + $CurForfeit;
             } else {
                 $installments[$i]["ForfeitDays"] = 0;
                 $installments[$i]["CurForfeitAmount"] = 0;
                 $installments[$i]["ForfeitAmount"] = $Forfeit;
                 $installments[$i]["remainder"] = $amount;
                 $installments[$i]["TotalRemainder"] += $amount;
             }
             $returnArr[] = $installments[$i];
             continue;
         } else {
             $installments[$i]["TotalRemainder"] = 0;
         }
         $remainder = $installments[$i]["InstallmentAmount"];
         $StartDate = $installments[$i]["InstallmentDate"];
         while (true) {
             $ToDate = $PayRecord == null ? DateModules::Now() : $PayRecord["PayDate"];
             if ($PayRecord != null) {
                 $installments[$i]["FixPayAmount"] = $PayRecord["FixPayAmount"] * 1;
                 $installments[$i]["PayAmount"] = $PayRecord["PayAmount"] * 1;
                 $installments[$i]["UsedPayAmount"] = $PayRecord["PayAmount"] * 1;
                 $installments[$i]["PayDate"] = $PayRecord["PayDate"];
             } else {
                 $installments[$i]["FixPayAmount"] = 0;
                 $installments[$i]["PayAmount"] = 0;
                 $installments[$i]["UsedPayAmount"] = 0;
                 $installments[$i]["PayDate"] = DateModules::Now();
             }
             $forfeitDays = DateModules::GDateMinusGDate($ToDate, $StartDate);
             $CurForfeit = round($remainder * $installments[$i]["ForfeitPercent"] * $forfeitDays / 36500);
             if ($StartDate < $ToDate) {
                 $installments[$i]["ForfeitDays"] = $forfeitDays;
                 $installments[$i]["CurForfeitAmount"] = $CurForfeit;
                 $Forfeit += $CurForfeit;
             }
             if ($PayRecord == null) {
                 $installments[$i]["TotalRemainder"] += $CurForfeit;
                 $installments[$i]["remainder"] = $remainder;
                 $installments[$i]["ForfeitAmount"] = $Forfeit;
                 $returnArr[] = $installments[$i];
                 break;
             }
             if ($remainder <= $PayRecord["PayAmount"] * 1) {
                 $PayRecord["PayAmount"] = $PayRecord["PayAmount"] * 1 - $remainder;
                 $installments[$i]["UsedPayAmount"] = $remainder;
                 $remainder = 0;
                 $installments[$i]["TotalRemainder"] = $Forfeit;
                 $installments[$i]["remainder"] = 0;
                 $installments[$i]["ForfeitAmount"] = $Forfeit;
                 if ($PayRecord["PayAmount"] == 0) {
                     $StartDate = max($PayRecord["PayDate"], $installments[$i]["InstallmentDate"]);
                     $PayRecord = $payIndex < count($pays) ? $pays[$payIndex++] : null;
                 }
                 $returnArr[] = $installments[$i];
                 break;
             }
             $remainder = $remainder - $PayRecord["PayAmount"] * 1;
             $StartDate = max($PayRecord["PayDate"], $installments[$i]["InstallmentDate"]);
             $installments[$i]["TotalRemainder"] = $remainder + $Forfeit;
             $installments[$i]["remainder"] = $remainder;
             $installments[$i]["ForfeitAmount"] = $Forfeit;
             $PayRecord = $payIndex < count($pays) ? $pays[$payIndex++] : null;
             $returnArr[] = $installments[$i];
         }
     }
     if ($Forfeit > 0) {
         while (true) {
             if ($PayRecord["PayAmount"] > 0) {
                 $installments[$i]["InstallmentDate"] = "---";
                 $installments[$i]["InstallmentAmount"] = 0;
                 $installments[$i]["FixPayAmount"] = $PayRecord["FixPayAmount"];
                 $installments[$i]["PayAmount"] = $PayRecord["PayAmount"];
                 $installments[$i]["UsedPayAmount"] = $PayRecord["PayAmount"];
                 $installments[$i]["PayDate"] = $PayRecord["PayDate"];
                 $Forfeit = $Forfeit - $PayRecord["PayAmount"] * 1;
                 $installments[$i]["ForfeitDays"] = 0;
                 $installments[$i]["TotalRemainder"] = $Forfeit;
                 $installments[$i]["CurForfeitAmount"] = 0;
                 $installments[$i]["ForfeitAmount"] = $Forfeit;
                 $installments[$i]["remainder"] = 0;
                 $returnArr[] = $installments[$i];
             }
             $PayRecord = $payIndex < count($pays) ? $pays[$payIndex++] : null;
             if ($PayRecord == null) {
                 break;
             }
         }
     }
     return $returnArr;
 }