function DeleteCosts() { $obj = new LON_costs($_POST["CostID"]); $DocRecord = $obj->GetAccDoc(); if ($DocRecord) { if ($DocRecord["DocStatus"] != "RAW") { echo Response::createObjectiveResponse(false, "سند مربوطه تایید شده و قابل حذف نمی باشد"); die; } ACC_docs::Remove($DocRecord["DocID"]); } $result = $obj->Remove(); echo Response::createObjectiveResponse($result, ExceptionHandler::GetExceptionsToString()); die; }
function RegisterDifferncePartsDoc($RequestID, $NewPartID, $pdo, $DocID = "") { $ReqObj = new LON_requests($RequestID); $NewPartObj = new LON_ReqParts($NewPartID); $dt = PdoDataAccess::runquery("select * from LON_ReqParts \r\n\t\twhere RequestID=? AND IsHistory='YES' order by PartID desc limit 1", array($RequestID)); $PreviousPartObj = new LON_ReqParts($dt[0]["PartID"]); //------------- get CostCodes -------------------- $LoanObj = new LON_loans($ReqObj->LoanID); $CostCode_Loan = FindCostID("110" . "-" . $LoanObj->_BlockCode); $CostCode_wage = FindCostID("750" . "-" . $LoanObj->_BlockCode); $CostCode_FutureWage = FindCostID("760" . "-" . $LoanObj->_BlockCode); $CostCode_agent_wage = FindCostID("750" . "-52"); $CostCode_agent_FutureWage = FindCostID("760" . "-52"); $CostCode_todiee = FindCostID("200-" . $LoanObj->_BlockCode . "-01"); //------------------------------------------------ $CycleID = substr(DateModules::shNow(), 0, 4); //-------------------------------------------------- $LoanMode = ""; if (!empty($ReqObj->ReqPersonID)) { $PersonObj = new BSC_persons($ReqObj->ReqPersonID); if ($PersonObj->IsAgent == "YES") { $LoanMode = "Agent"; } } else { $LoanMode = "Customer"; } //------------------ find tafsilis --------------- $LoanPersonTafsili = FindTafsiliID($ReqObj->LoanPersonID, TAFTYPE_PERSONS); if (!$LoanPersonTafsili) { ExceptionHandler::PushException("تفصیلی مربوطه یافت نشد.[" . $ReqObj->LoanPersonID . "]"); return false; } if ($LoanMode == "Agent") { $ReqPersonTafsili = FindTafsiliID($ReqObj->ReqPersonID, TAFTYPE_PERSONS); if (!$ReqPersonTafsili) { ExceptionHandler::PushException("تفصیلی مربوطه یافت نشد.[" . $ReqObj->ReqPersonID . "]"); return false; } $SubAgentTafsili = ""; if (!empty($ReqObj->SubAgentID)) { $SubAgentTafsili = FindTafsiliID($ReqObj->SubAgentID, TAFTYPE_SUBAGENT); if (!$SubAgentTafsili) { ExceptionHandler::PushException("تفصیلی زیر واحد سرمایه گذار یافت نشد.[" . $ReqObj->SubAgentID . "]"); return false; } } } //------------------------------------------------ // check for partAmount not greater than todiee if ($NewPartObj->PartAmount * 1 != $PreviousPartObj->PartAmount * 1) { $dt = PdoDataAccess::runquery("select ifnull(sum(CreditorAmount-DebtorAmount),0) amount\r\n\t\t\tfrom ACC_DocItems where CostID=? AND TafsiliID=? AND sourceID=?", array($CostCode_todiee, $LoanPersonTafsili, $ReqObj->RequestID)); if ($PreviousPartObj->PartAmount * 1 - $NewPartObj->PartAmount * 1 > $dt[0]["amount"] * 1) { ExceptionHandler::PushException("مبلغ جدید کمتر از مبلغی است که تاکنون پرداخت شده است "); return false; } } //---------------- add doc header -------------------- if ($DocID == "") { $obj = new ACC_docs(); $obj->RegDate = PDONOW; $obj->regPersonID = $_SESSION['USER']["PersonID"]; $obj->DocDate = PDONOW; $obj->CycleID = $CycleID; $obj->BranchID = $ReqObj->BranchID; $obj->DocType = DOCTYPE_LOAN_DIFFERENCE; $obj->description = "اختلاف حاصل از شرایط جدید برای وام شماره " . $ReqObj->RequestID; if (!$obj->Add($pdo)) { ExceptionHandler::PushException("خطا در ایجاد سند"); return false; } } else { $obj = new ACC_docs($DocID); PdoDataAccess::runquery("delete from ACC_DocItems where DocID=?", array($DocID), $pdo); } //-------------------------------------------------------- // compute the previous amounts $diferences = array("FundWageYears" => array(), "AgentWageYears" => array(), "CustomerYearDelays" => array()); $dt = PdoDataAccess::runquery("select * from LON_payments where RequestID=?", array($RequestID), $pdo); $firstPayDate = $dt[0]["PayDate"]; $totalPaid = 0; foreach ($dt as $PayRow) { $totalPaid += $PayRow["PayAmount"]; $result_old = ComputeWagesAndDelays($PreviousPartObj, $PayRow["PayAmount"], $firstPayDate, $PayRow["PayDate"]); $result_new = ComputeWagesAndDelays($NewPartObj, $PayRow["PayAmount"], $firstPayDate, $PayRow["PayDate"]); foreach ($result_new["FundWageYears"] as $year => $amount) { if (!isset($diferences["FundWageYears"][$year])) { $diferences["FundWageYears"][$year] = 0; } $diferences["FundWageYears"][$year] += $amount; } foreach ($result_old["FundWageYears"] as $year => $amount) { if (!isset($diferences["FundWageYears"][$year])) { $diferences["FundWageYears"][$year] = 0; } $diferences["FundWageYears"][$year] -= $amount; } //..................................................... foreach ($result_new["CustomerYearDelays"] as $year => $amount) { if (!isset($diferences["CustomerYearDelays"][$year])) { $diferences["CustomerYearDelays"][$year] = 0; } $diferences["CustomerYearDelays"][$year] += $amount; } foreach ($result_old["CustomerYearDelays"] as $year => $amount) { if (!isset($diferences["CustomerYearDelays"][$year])) { $diferences["CustomerYearDelays"][$year] = 0; } $diferences["CustomerYearDelays"][$year] -= $amount; } } $MaxWage = max($NewPartObj->CustomerWage * 1, $NewPartObj->FundWage); $AgentFactor = $MaxWage == 0 ? 0 : ($NewPartObj->CustomerWage - $NewPartObj->FundWage) / $MaxWage; $result = ComputeWagesAndDelays($NewPartObj, $NewPartObj->PartAmount, $firstPayDate, $NewPartObj->PartDate); $TotalFundWage = $result["TotalFundWage"]; $TotalAgentWage = $result["TotalAgentWage"]; $TotalCustomerWage = $result["TotalCustomerWage"]; $FundYears = $result["FundWageYears"]; $AgentYears = $result["AgentWageYears"]; $TotalFundDelay = $result["TotalFundDelay"]; $TotalAgentDelay = $result["TotalAgentDelay"]; $ExtraAmount = 0; //----------------- add Doc items ------------------------ $itemObj = new ACC_DocItems(); $itemObj->DocID = $obj->DocID; $itemObj->TafsiliType = TAFTYPE_PERSONS; $itemObj->TafsiliID = $LoanPersonTafsili; if ($LoanMode == "Agent") { $itemObj->TafsiliType2 = TAFTYPE_PERSONS; $itemObj->TafsiliID2 = $ReqPersonTafsili; } $itemObj->locked = "YES"; $itemObj->SourceType = DOCTYPE_LOAN_DIFFERENCE; $itemObj->SourceID = $ReqObj->RequestID; $itemObj->SourceID2 = $NewPartObj->PartID; $extraAmount = 0; if ($NewPartObj->WageReturn == "INSTALLMENT") { if ($NewPartObj->MaxFundWage * 1 > 0) { $extraAmount += $NewPartObj->MaxFundWage; } else { if ($NewPartObj->CustomerWage > $NewPartObj->FundWage) { $extraAmount += $TotalFundWage; } else { $extraAmount += $TotalCustomerWage; } } } if ($NewPartObj->AgentReturn == "INSTALLMENT" && $NewPartObj->CustomerWage > $NewPartObj->FundWage) { $extraAmount += $TotalAgentWage; } if ($NewPartObj->DelayReturn == "INSTALLMENT") { $extraAmount += $TotalFundDelay; } if ($TotalAgentDelay > 0 && $NewPartObj->AgentDelayReturn == "INSTALLMENT") { $extraAmount += $TotalAgentDelay; } function GetAmount($RequestID, $CostID, $TafsiliID = "") { $query = "select ifnull(sum(DebtorAmount-CreditorAmount),0) amount \r\n\t\t\tfrom ACC_DocItems \r\n\t\t\twhere SourceType in(" . DOCTYPE_LOAN_PAYMENT . "," . DOCTYPE_LOAN_DIFFERENCE . " )\r\n\t\t\tAND SourceID=? AND CostID=?"; $params = array($RequestID, $CostID); if ($TafsiliID != "") { $query .= " AND TafsiliID=?"; $params[] = $TafsiliID; } $dt = PdoDataAccess::runquery($query, $params); return $dt[0]["amount"] * 1; } //...............Loan .............................. $CostCode_LoanAmount = GetAmount($RequestID, $CostCode_Loan) - ($NewPartObj->PartAmount * 1 + $extraAmount); if ($CostCode_LoanAmount != 0) { unset($itemObj->ItemID); $itemObj->DocID = $obj->DocID; $itemObj->CostID = $CostCode_Loan; $itemObj->DebtorAmount = $CostCode_LoanAmount < 0 ? abs($CostCode_LoanAmount) : 0; $itemObj->CreditorAmount = $CostCode_LoanAmount > 0 ? $CostCode_LoanAmount : 0; $itemObj->Add($pdo); } //.......... Todiee .................................... if ($NewPartObj->PartAmount * 1 != $PreviousPartObj->PartAmount) { $CostCode_todieeAmount = GetAmount($RequestID, $CostCode_todiee) - ($NewPartObj->PartAmount * 1 - $totalPaid); unset($itemObj->ItemID); $itemObj->CostID = $CostCode_todiee; $itemObj->DebtorAmount = $CostCode_todieeAmount < 0 ? abs($CostCode_todieeAmount) : 0; $itemObj->CreditorAmount = $CostCode_todieeAmount > 0 ? $CostCode_todieeAmount : 0; $itemObj->Add($pdo); } //------------------------ delay ------------------------------- $curYear = substr(DateModules::miladi_to_shamsi($NewPartObj->PartDate), 0, 4) * 1; $index = 0; foreach ($diferences["CustomerYearDelays"] as $year => $value) { $FundYearAmount = $NewPartObj->FundWage / $NewPartObj->DelayPercent * $value; $AgentYearAmount = ($NewPartObj->CustomerWage * 1 - $NewPartObj->FundWage * 1) / $NewPartObj->DelayPercent * 1 * $value; if ($FundYearAmount != 0) { unset($itemObj->ItemID); unset($itemObj->TafsiliType2); unset($itemObj->TafsiliID2); $itemObj->CostID = $year == $curYear ? $CostCode_wage : $CostCode_FutureWage; $itemObj->TafsiliType = TAFTYPE_YEARS; $itemObj->TafsiliID = FindTafsiliID($year, TAFTYPE_YEARS); $itemObj->DebtorAmount = $FundYearAmount < 0 ? abs($FundYearAmount) : 0; $itemObj->CreditorAmount = $FundYearAmount > 0 ? $FundYearAmount : 0; $itemObj->details = "کارمزد دوره تنفس وام شماره " . $ReqObj->RequestID; if (!$itemObj->Add($pdo)) { ExceptionHandler::PushException("خطا در ایجاد ردیف کارمزد تنفس"); return false; } $ExtraAmount += $FundYearAmount > 0 ? $FundYearAmount : 0; } if ($AgentYearAmount > 0) { unset($itemObj->ItemID); $itemObj->CostID = $year == $curYear ? $CostCode_agent_wage : $CostCode_agent_FutureWage; $itemObj->DebtorAmount = $AgentYearAmount; $itemObj->CreditorAmount = 0; $itemObj->details = "اختلاف کارمزد تنفس وام شماره " . $ReqObj->RequestID; if (!$itemObj->Add($pdo)) { ExceptionHandler::PushException("خطا در ایجاد ردیف کارمزد تنفس"); return false; } } if ($AgentYearAmount < 0) { unset($itemObj->ItemID); $itemObj->CostID = $year == $curYear ? $CostCode_agent_wage : $CostCode_agent_FutureWage; $itemObj->DebtorAmount = 0; $itemObj->CreditorAmount = $AgentYearAmount; $itemObj->details = "سهم کارمزد تنفس وام شماره " . $ReqObj->RequestID; if (!$itemObj->Add($pdo)) { ExceptionHandler::PushException("خطا در ایجاد ردیف کارمزد تنفس"); return false; } } $index++; } //------------------------ کارمزد--------------------- foreach ($diferences["FundWageYears"] as $Year => $amount) { if ($amount == 0) { continue; } $YearTafsili = FindTafsiliID($Year, TAFTYPE_YEARS); if (!$YearTafsili) { ExceptionHandler::PushException("تفصیلی مربوطه یافت نشد.[" . $Year . "]"); return false; } unset($itemObj->ItemID); $itemObj->CostID = $Year == $curYear ? $CostCode_wage : $CostCode_FutureWage; $itemObj->TafsiliType = TAFTYPE_YEARS; $itemObj->TafsiliID = $YearTafsili; $itemObj->details = "کارمزد وام شماره " . $ReqObj->RequestID; unset($itemObj->TafsiliType2); unset($itemObj->TafsiliID2); $itemObj->DebtorAmount = $amount < 0 ? abs($amount) : 0; $itemObj->CreditorAmount = $amount > 0 ? $amount : 0; $itemObj->Add($pdo); //$ExtraAmount += $amount<0 ? abs($amount) : 0; if ($NewPartObj->AgentReturn == "INSTALLMENT") { if ($LoanMode == "Agent" && $NewPartObj->FundWage * 1 > $NewPartObj->CustomerWage) { unset($itemObj->ItemID); $itemObj->details = "اختلاف کارمزد وام شماره " . $ReqObj->RequestID; $itemObj->CostID = $Year == $curYear ? $CostCode_wage : $CostCode_FutureWage; $itemObj->DebtorAmount = $amount * $AgentFactor < 0 ? abs($amount * $AgentFactor) : 0; $itemObj->CreditorAmount = $amount * $AgentFactor > 0 ? $amount * $AgentFactor : 0; $itemObj->TafsiliType = TAFTYPE_YEARS; $itemObj->TafsiliID = $YearTafsili; $itemObj->TafsiliType2 = TAFTYPE_PERSONS; $itemObj->TafsiliID2 = $ReqPersonTafsili; $itemObj->Add($pdo); } if ($LoanMode == "Agent" && $NewPartObj->FundWage * 1 < $NewPartObj->CustomerWage) { unset($itemObj->ItemID); $itemObj->details = "سهم کارمزد وام شماره " . $ReqObj->RequestID; $itemObj->CostID = $Year == $curYear ? $CostCode_wage : $CostCode_FutureWage; $itemObj->DebtorAmount = $amount * $AgentFactor > 0 ? $amount * $AgentFactor : 0; $itemObj->CreditorAmount = $amount * $AgentFactor < 0 ? abs($amount * $AgentFactor) : 0; $itemObj->TafsiliType = TAFTYPE_YEARS; $itemObj->TafsiliID = $YearTafsili; $itemObj->TafsiliType2 = TAFTYPE_PERSONS; $itemObj->TafsiliID2 = $ReqPersonTafsili; $itemObj->Add($pdo); } } } /*if($NewPartObj->AgentReturn == "CUSTOMER" && $NewPartObj->CustomerWage > $NewPartObj->FundWage) { unset($itemObj->ItemID); $itemObj->details = "سهم کارمزد وام شماره " . $ReqObj->RequestID; $itemObj->CostID = $CostCode_deposite; $itemObj->DebtorAmount = 0; $itemObj->CreditorAmount = $TotalAgentWage; $itemObj->TafsiliType = TAFTYPE_PERSONS; $itemObj->TafsiliID = $ReqPersonTafsili; if($LoanMode == "Agent") { $itemObj->TafsiliType2 = TAFTYPE_PERSONS; $itemObj->TafsiliID2 = $ReqPersonTafsili; } $itemObj->Add($pdo); }*/ // ---------------------------- ExtraAmount -------------------------------- if ($ExtraAmount > 0) { $itemObj = new ACC_DocItems(); $itemObj->DocID = $obj->DocID; $itemObj->CostID = $CostCode_Loan; $itemObj->DebtorAmount = $ExtraAmount; $itemObj->CreditorAmount = 0; $itemObj->locked = "YES"; $itemObj->SourceID = $ReqObj->RequestID; $itemObj->SourceID2 = $NewPartObj->PartID; $itemObj->Add($pdo); //-------------------- add loan cost for difference -------------------- $dt = PdoDataAccess::runquery("select * from LON_costs where RequestID=? AND PartID=?", array($NewPartObj->RequestID, $NewPartObj->PartID)); if (count($dt) > 0) { $obj = new LON_costs($dt[0]["CostID"]); $obj->CostAmount = $ExtraAmount; $obj->Edit($pdo); } else { $obj = new LON_costs(); $obj->RequestID = $NewPartObj->RequestID; $obj->CostDesc = "اختلافت حاصل از تغییر شرایط پرداخت"; $obj->CostAmount = $ExtraAmount; $obj->CostID = $CostCode_Loan; $obj->IsPartDiff = "YES"; $obj->PartID = $NewPartObj->PartID; $obj->Add($pdo); } } //--------------------------------------------------------- if (ExceptionHandler::GetExceptionCount() > 0) { return false; } return true; }