diff --git a/app/adminapi/controller/contract/ProcurementContractController.php b/app/adminapi/controller/contract/ProcurementContractController.php index 309b4b232..d1a29fa58 100644 --- a/app/adminapi/controller/contract/ProcurementContractController.php +++ b/app/adminapi/controller/contract/ProcurementContractController.php @@ -58,6 +58,22 @@ class ProcurementContractController extends BaseAdminController } return $this->fail(ProcurementContractLogic::getError()); } + + /** + * @notes 编辑采购合同 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/02 17:19 + */ + public function edit() + { + $params = (new ProcurementContractValidate())->post()->goCheck('edit'); + $result = ProcurementContractLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(ProcurementContractLogic::getError()); + } /** * @notes 获取采购合同详情 diff --git a/app/adminapi/logic/contract/ProcurementContractLogic.php b/app/adminapi/logic/contract/ProcurementContractLogic.php index 890b77399..4eaf10218 100644 --- a/app/adminapi/logic/contract/ProcurementContractLogic.php +++ b/app/adminapi/logic/contract/ProcurementContractLogic.php @@ -120,6 +120,117 @@ class ProcurementContractLogic extends BaseLogic } } + + /** + * @notes 编辑采购合同 + * @param array $params + * @return bool + * @author likeadmin + * @date 2023/12/02 17:19 + */ + public static function edit(array $params): bool + { + //采购合同明细 + $procurement_contract_detail = json_decode($params['procurement_contract_detail'],true); + //付款计划 + $payment_plan = json_decode($params['payment_plan'],true); + //税率字典值 + $tax_rate_dict = DictData::where('type_value','tax_rate')->column('name','value'); + //合同金额\不含税金额 + $contract_amount = 0; + $amount_excluding_tax = 0; + foreach($procurement_contract_detail as $v){ + $contract_amount += $v['price']*$v['num']; + $amount_excluding_tax += $v['num'] * $v['price'] * (1- $tax_rate_dict[$v['tax_rate']] / 100); + } + Db::startTrans(); + try { + $procurementContract = ProcurementContract::where('id',$params['id'])->update([ + 'org_id' => $params['org_id'], + 'dept_id' => $params['dept_id'], + 'supplier_id' => $params['supplier_id'], + 'project_id' => $params['project_id'], + 'contract_no' => data_unique_code('CGHT'), + 'contract_name' => $params['contract_name'], + 'contract_type' => $params['contract_type'], + 'signing_date' => strtotime($params['signing_date']), + 'pay_type' => $params['pay_type'], + 'account_period' => $params['account_period'], + //合同金额 + 'contract_amount' => $contract_amount, + //不含税金额 + 'amount_excluding_tax' => $amount_excluding_tax, + //质保金 + 'retention_money' => $contract_amount * ($params['retention_money_rate'] / 100), + //质保金比例 + 'retention_money_rate' => $params['retention_money_rate'], + 'remark' => $params['remark'] ?? '', + 'annex' => !empty($params['annex']) ? $params['annex'] : null + ]); + foreach ($procurement_contract_detail as $v) + { + if(isset($v['id']) && $v != ''){ + ProcurementContractDetail::where('id',$v['id'])->update([ + 'contract_id' => $params['id'], + 'material_purchase_request_detail_id' => $v['material_purchase_request_detail_id'], + 'num' => $v['num'], + 'price' => $v['price'], + 'tax_rate' => $v['tax_rate'], + //不含税金额 + 'amount_excluding_tax' => $v['num'] * $v['price'] * (1- $tax_rate_dict[$v['tax_rate']] / 100), + //含税金额 + 'amount_including_tax' => $v['num'] * $v['price'], + ]); + }else{ + ProcurementContractDetail::create([ + 'contract_id' => $params['id'], + 'material_purchase_request_detail_id' => $v['material_purchase_request_detail_id'], + 'num' => $v['num'], + 'price' => $v['price'], + 'tax_rate' => $v['tax_rate'], + //不含税金额 + 'amount_excluding_tax' => $v['num'] * $v['price'] * (1- $tax_rate_dict[$v['tax_rate']] / 100), + //含税金额 + 'amount_including_tax' => $v['num'] * $v['price'], + ]); + } + } + foreach ($payment_plan as $v) + { + if(isset($v['id']) && $v != ''){ + FinancePaymentPlan::where('id',$v['id'])->update([ + 'supplier_id' => $params['supplier_id'], + 'project_id' => $params['project_id'], + 'contract_id' => $params['id'], + 'contract_type' => 1, + 'period' => $v['period'], + 'pay_date' => strtotime($v['pay_date']), + 'amount' => $v['amount'], + 'status' => 1, + 'remark' => $v['remark'] ?? '', + ]); + }else{ + FinancePaymentPlan::create([ + 'supplier_id' => $params['supplier_id'], + 'project_id' => $params['project_id'], + 'contract_id' => $params['id'], + 'contract_type' => 1, + 'period' => $v['period'], + 'pay_date' => strtotime($v['pay_date']), + 'amount' => $v['amount'], + 'status' => 1, + 'remark' => $v['remark'] ?? '', + ]); + } + } + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } /** * @notes 获取采购合同详情 diff --git a/app/adminapi/validate/contract/ProcurementContractValidate.php b/app/adminapi/validate/contract/ProcurementContractValidate.php index 1bf098916..2e8c0d067 100644 --- a/app/adminapi/validate/contract/ProcurementContractValidate.php +++ b/app/adminapi/validate/contract/ProcurementContractValidate.php @@ -15,9 +15,11 @@ namespace app\adminapi\validate\contract; +use app\common\model\contract\ProcurementContractDetail; use app\common\model\dept\Dept; use app\common\model\dept\Orgs; use app\common\model\dict\DictData; +use app\common\model\finance\FinancePaymentPlan; use app\common\model\material\MaterialPurchaseRequestDetail; use app\common\model\project\Project; use app\common\model\supplier\Supplier; @@ -207,6 +209,12 @@ class ProcurementContractValidate extends BaseValidate return '采购合同明细数据格式错误'; } foreach($detail as $v) { + if(isset($v['id']) && $v['id'] != ''){ + $data_detail = ProcurementContractDetail::where('id',$v['id'])->findOrEmpty(); + if($data_detail->isEmpty()){ + return '采购合同明细信息不存在'; + } + } if(empty($v['material_purchase_request_detail_id'])){ return '请选择采购申请明细信息'; }else{ @@ -248,6 +256,12 @@ class ProcurementContractValidate extends BaseValidate return '付款计划据格式错误'; } foreach($detail as $v) { + if(isset($v['id']) && $v['id'] != ''){ + $data_detail = FinancePaymentPlan::where('id',$v['id'])->findOrEmpty(); + if($data_detail->isEmpty()){ + return '付款计划信息不存在'; + } + } if(empty($v['period'])){ return '请选择期次'; }else{