From 391d1bbe408e8acf225cb7864e6363f2f973e0d8 Mon Sep 17 00:00:00 2001
From: weiz <736250432@qq.com>
Date: Wed, 20 Mar 2024 10:23:05 +0800
Subject: [PATCH] update

---
 .../quotation/QuotationController.php         | 20 +++++
 .../quotation/QuotationDetailController.php   |  7 ++
 .../custom/CustomerDemandSolutionLogic.php    | 10 ---
 .../logic/project/CompetitorLogic.php         | 10 ---
 .../logic/project/ProjectEstimateLogic.php    | 10 ---
 .../logic/project/ProjectFollowUpLogic.php    |  1 -
 .../logic/quotation/QuotationLogic.php        | 77 ++++++++++++++++---
 .../SupervisionProjectInfoReportLogic.php     |  1 +
 .../custom/CustomerDemandSolutionValidate.php | 37 ---------
 .../custom/CustomerDemandValidate.php         | 11 ---
 .../validate/project/CompetitorValidate.php   | 37 ---------
 .../project/ProjectEstimateValidate.php       | 38 ---------
 .../project/ProjectFollowUpValidate.php       | 10 ---
 .../validate/project/ProjectValidate.php      | 15 +---
 .../validate/quotation/QuotationValidate.php  | 60 ++++-----------
 .../model/custom/CustomerDemandSolution.php   |  5 --
 app/common/model/project/Competitor.php       |  5 --
 app/common/model/project/Project.php          |  5 --
 app/common/model/project/ProjectEstimate.php  |  5 --
 app/common/model/project/ProjectFollowUp.php  |  5 --
 app/common/model/quotation/Quotation.php      |  4 -
 21 files changed, 112 insertions(+), 261 deletions(-)

diff --git a/app/adminapi/controller/quotation/QuotationController.php b/app/adminapi/controller/quotation/QuotationController.php
index b6ec354e6..f248a5136 100644
--- a/app/adminapi/controller/quotation/QuotationController.php
+++ b/app/adminapi/controller/quotation/QuotationController.php
@@ -59,6 +59,26 @@ class QuotationController extends BaseAdminController
         return $this->fail(QuotationLogic::getError());
     }
 	
+	public function edit()
+	{
+		$params = (new QuotationValidate())->post()->goCheck('edit');
+		$result = QuotationLogic::edit($params,$this->adminId);
+		if (true === $result) {
+			return $this->success('编辑成功', [], 1, 1);
+		}
+		return $this->fail(QuotationLogic::getError());
+	}
+	
+	public function delete()
+	{
+		$params = (new QuotationValidate())->post()->goCheck('delete');
+		$result = QuotationLogic::delete($params);
+		if (true === $result) {
+			return $this->success('删除成功', [], 1, 1);
+		}
+		return $this->fail(QuotationLogic::getError());
+	}
+	
 
 
     /**
diff --git a/app/adminapi/controller/quotation/QuotationDetailController.php b/app/adminapi/controller/quotation/QuotationDetailController.php
index a9b5946e2..5590b5164 100644
--- a/app/adminapi/controller/quotation/QuotationDetailController.php
+++ b/app/adminapi/controller/quotation/QuotationDetailController.php
@@ -42,4 +42,11 @@ class QuotationDetailController extends BaseAdminController
         return $this->dataLists(new QuotationDetailLists());
     }
 	
+	public function delete()
+	{
+		$params = (new QuotationDetailValidate())->post()->goCheck('delete');
+		QuotationDetailLogic::delete($params);
+		return $this->success('删除成功', [], 1, 1);
+	}
+	
 }
\ No newline at end of file
diff --git a/app/adminapi/logic/custom/CustomerDemandSolutionLogic.php b/app/adminapi/logic/custom/CustomerDemandSolutionLogic.php
index fcfa4cc6c..10fdf9f20 100644
--- a/app/adminapi/logic/custom/CustomerDemandSolutionLogic.php
+++ b/app/adminapi/logic/custom/CustomerDemandSolutionLogic.php
@@ -20,8 +20,6 @@ use app\common\model\custom\Custom;
 use app\common\model\custom\CustomerDemand;
 use app\common\model\custom\CustomerDemandSolution;
 use app\common\logic\BaseLogic;
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
 use app\common\model\project\Project;
 use think\facade\Db;
 
@@ -47,8 +45,6 @@ class CustomerDemandSolutionLogic extends BaseLogic
         Db::startTrans();
         try {
             CustomerDemandSolution::create([
-                'org_id' => $params['org_id'],
-                'dept_id' => $params['dept_id'],
                 'project_id' => $params['project_id'],
                 'customer_demand_id' => $params['customer_demand_id'],
                 'theme' => $params['theme'],
@@ -81,8 +77,6 @@ class CustomerDemandSolutionLogic extends BaseLogic
         Db::startTrans();
         try {
             CustomerDemandSolution::where('id', $params['id'])->update([
-	            'org_id' => $params['org_id'],
-	            'dept_id' => $params['dept_id'],
 	            'project_id' => $params['project_id'],
 	            'customer_demand_id' => $params['customer_demand_id'],
 	            'theme' => $params['theme'],
@@ -126,14 +120,10 @@ class CustomerDemandSolutionLogic extends BaseLogic
     public static function detail($params): array
     {
 		$data = CustomerDemandSolution::field('id,org_id,dept_id,project_id,customer_demand_id,theme,submission_time,solution_content,customer_feedback,annex,add_user,update_user,create_time,update_time')->findOrEmpty($params['id'])->toArray();
-		$org = Orgs::field('name')->where('id',$data['org_id'])->findOrEmpty();
-		$dept = Dept::field('name')->where('id',$data['dept_id'])->findOrEmpty();
 		$project = Project::field('name,project_code,custom_id')->where('id',$data['project_id'])->findOrEmpty();
 		$custom = Custom::field('name')->where('id',$project['custom_id'])->findOrEmpty();
 		$demand = CustomerDemand::field('theme')->where('id',$data['customer_demand_id'])->findOrEmpty();
 	    $admin = Admin::where('id','in',[$data['add_user'],$data['update_user']])->column('name','id');
-		$data['org_name'] = $org['name'];
-		$data['dept_name'] = $dept['name'];
 		$data['project_name'] = $project['name'];
 		$data['project_code'] = $project['project_code'];
 		$data['custom_name'] = $custom['name'];
diff --git a/app/adminapi/logic/project/CompetitorLogic.php b/app/adminapi/logic/project/CompetitorLogic.php
index 97aa1236b..49bd795f0 100644
--- a/app/adminapi/logic/project/CompetitorLogic.php
+++ b/app/adminapi/logic/project/CompetitorLogic.php
@@ -18,8 +18,6 @@ namespace app\adminapi\logic\project;
 use app\common\model\auth\Admin;
 use app\common\model\custom\Custom;
 use app\common\model\custom\CustomerDemand;
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
 use app\common\model\project\Competitor;
 use app\common\logic\BaseLogic;
 use app\common\model\project\Project;
@@ -44,8 +42,6 @@ class CompetitorLogic extends BaseLogic
         Db::startTrans();
         try {
             Competitor::create([
-                'org_id' => $params['org_id'],
-                'dept_id' => $params['dept_id'],
                 'project_id' => $params['project_id'],
                 'customer_demand_id' => $params['customer_demand_id'],
                 'competitor_name' => $params['competitor_name'],
@@ -81,8 +77,6 @@ class CompetitorLogic extends BaseLogic
         Db::startTrans();
         try {
             Competitor::where('id', $params['id'])->update([
-	            'org_id' => $params['org_id'],
-	            'dept_id' => $params['dept_id'],
 	            'project_id' => $params['project_id'],
 	            'customer_demand_id' => $params['customer_demand_id'],
 	            'competitor_name' => $params['competitor_name'],
@@ -130,14 +124,10 @@ class CompetitorLogic extends BaseLogic
     {
 		$field = 'id,org_id,dept_id,project_id,customer_demand_id,competitor_name,competitor_contacts,competitor_contacts_phone,competitive_power,competitor_advantages,competitor_disadvantages,remark,annex,add_user,update_user,create_time,update_time';
 		$data = Competitor::field($field)->findOrEmpty($params['id'])->toArray();
-	    $org = Orgs::field('name')->where('id',$data['org_id'])->findOrEmpty();
-	    $dept = Dept::field('name')->where('id',$data['dept_id'])->findOrEmpty();
 	    $project = Project::field('name,project_code,custom_id')->where('id',$data['project_id'])->findOrEmpty();
 	    $custom = Custom::field('name')->where('id',$project['custom_id'])->findOrEmpty();
 	    $demand = CustomerDemand::field('theme')->where('id',$data['customer_demand_id'])->findOrEmpty();
 		$admin = Admin::where('id','in',[$data['add_user'],$data['update_user']])->column('name','id');
-	    $data['org_name'] = $org['name'];
-	    $data['dept_name'] = $dept['name'];
 	    $data['project_name'] = $project['name'];
 	    $data['project_code'] = $project['project_code'];
 	    $data['custom_name'] = $custom['name'];
diff --git a/app/adminapi/logic/project/ProjectEstimateLogic.php b/app/adminapi/logic/project/ProjectEstimateLogic.php
index 13a65e0a9..fae9327ea 100644
--- a/app/adminapi/logic/project/ProjectEstimateLogic.php
+++ b/app/adminapi/logic/project/ProjectEstimateLogic.php
@@ -19,8 +19,6 @@ use app\common\model\auth\Admin;
 use app\common\model\custom\Custom;
 use app\common\model\custom\CustomContacts;
 use app\common\model\custom\CustomerDemand;
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
 use app\common\model\project\Project;
 use app\common\model\project\ProjectEstimate;
 use app\common\logic\BaseLogic;
@@ -48,8 +46,6 @@ class ProjectEstimateLogic extends BaseLogic
         Db::startTrans();
         try {
             ProjectEstimate::create([
-                'org_id' => $params['org_id'],
-                'dept_id' => $params['dept_id'],
                 'project_id' => $params['project_id'],
                 'customer_demand_id' => $params['customer_demand_id'],
                 'estimate_source' => $params['estimate_source'],
@@ -86,8 +82,6 @@ class ProjectEstimateLogic extends BaseLogic
         Db::startTrans();
         try {
             ProjectEstimate::where('id', $params['id'])->update([
-	            'org_id' => $params['org_id'],
-	            'dept_id' => $params['dept_id'],
 	            'project_id' => $params['project_id'],
 	            'customer_demand_id' => $params['customer_demand_id'],
 	            'estimate_source' => $params['estimate_source'],
@@ -138,16 +132,12 @@ class ProjectEstimateLogic extends BaseLogic
 		$data = ProjectEstimate::field($field)->findOrEmpty($params['id']);
 	    $data['estimate_source_text'] = $data->estimate_source_text;
 	    $data['invoice_type_text'] = $data->invoice_type_text;
-	    $org = Orgs::field('name')->where('id',$data['org_id'])->findOrEmpty();
-	    $dept = Dept::field('name')->where('id',$data['dept_id'])->findOrEmpty();
 	    $project = Project::field('name,project_code,custom_id')->where('id',$data['project_id'])->findOrEmpty();
 	    $custom = Custom::field('name')->where('id',$project['custom_id'])->findOrEmpty();
 	    $demand = CustomerDemand::field('theme')->where('id',$data['customer_demand_id'])->findOrEmpty();
 		$contract = CustomContacts::field('name,phone')->where('id',$data['contact_id'])->findOrEmpty();
 		$technician = Admin::field('name')->where('id',$data['technician'])->findOrEmpty();
 	    $admin = Admin::where('id','in',[$data['add_user'],$data['update_user']])->column('name','id');
-	    $data['org_name'] = $org['name'];
-	    $data['dept_name'] = $dept['name'];
 	    $data['project_name'] = $project['name'];
 	    $data['project_code'] = $project['project_code'];
 	    $data['custom_name'] = $custom['name'];
diff --git a/app/adminapi/logic/project/ProjectFollowUpLogic.php b/app/adminapi/logic/project/ProjectFollowUpLogic.php
index ffdca9da6..53e1b3d21 100644
--- a/app/adminapi/logic/project/ProjectFollowUpLogic.php
+++ b/app/adminapi/logic/project/ProjectFollowUpLogic.php
@@ -15,7 +15,6 @@
 namespace app\adminapi\logic\project;
 
 
-use app\common\model\auth\Admin;
 use app\common\model\custom\Custom;
 use app\common\model\project\Project;
 use app\common\model\project\ProjectFollowUp;
diff --git a/app/adminapi/logic/quotation/QuotationLogic.php b/app/adminapi/logic/quotation/QuotationLogic.php
index a29337c23..709a15037 100644
--- a/app/adminapi/logic/quotation/QuotationLogic.php
+++ b/app/adminapi/logic/quotation/QuotationLogic.php
@@ -16,8 +16,6 @@ namespace app\adminapi\logic\quotation;
 
 
 use app\common\model\custom\Custom;
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
 use app\common\model\dict\DictData;
 use app\common\model\quotation\Quotation;
 use app\common\model\quotation\QuotationDetail;
@@ -52,8 +50,6 @@ class QuotationLogic extends BaseLogic
         Db::startTrans();
         try {
             $quotation = Quotation::create([
-                'org_id' => $params['org_id'],
-                'dept_id' => $params['dept_id'],
                 'custom_id' => $params['custom_id'],
 				'code' => data_unique_code('报价单'),
                 'quotation_date' => !empty($params['quotation_date']) ? strtotime($params['quotation_date']) : 0,
@@ -87,6 +83,73 @@ class QuotationLogic extends BaseLogic
         }
     }
 	
+	public static function edit(array $params): bool
+	{
+		$quotation_detail = $params['quotation_detail'];
+		$tax_rate_dict = DictData::where('type_value','tax_rate')->column('name','value');
+		foreach($quotation_detail as &$v){
+			$v['tax_inclusive_amount'] = $v['num'] * $v['tax_inclusive_price'];
+			$v['tax_exclusive_amount'] = $v['num'] * $v['tax_inclusive_price'] * (1- $tax_rate_dict[$v['tax_rate']] / 100);
+		}
+		Db::startTrans();
+		try {
+			$quotation = Quotation::where('id',$params['id'])->update([
+				'custom_id' => $params['custom_id'],
+				'quotation_date' => !empty($params['quotation_date']) ? strtotime($params['quotation_date']) : 0,
+				'create_user' => $params['create_user'] ?? '',
+				'invoice_type' => $params['invoice_type'] ?? 0,
+				'freight' => $params['freight'],
+				'other_fee' => $params['other_fee'],
+				'customer_require' => $params['customer_require'] ?? '',
+				'remark' => $params['remark'] ?? '',
+				'annex' => $params['annex']? json_encode($params['annex']) : null,
+				'update_time' => time(),
+			]);
+			foreach ($quotation_detail as $item)
+			{
+				if(!empty($item['id'])){
+					QuotationDetail::where('id',$item['id'])->update([
+						'quotation_id' => $params['id'],
+						'product_id' => $item['product_id'],
+						'num' => $item['num'],
+						'tax_rate' => $item['tax_rate'],
+						'tax_inclusive_price' => $item['tax_inclusive_price'],
+						'tax_inclusive_amount' => $item['tax_inclusive_price'] * $item['num'],
+						'tax_exclusive_amount' => $item['tax_inclusive_price'] * $item['num']  * (1- $tax_rate_dict[$item['tax_rate']] / 100),
+						'remark' => $item['remark'] ?? ''
+					]);
+				}else{
+					QuotationDetail::create([
+						'quotation_id' => $params['id'],
+						'product_id' => $item['product_id'],
+						'num' => $item['num'],
+						'tax_rate' => $item['tax_rate'],
+						'tax_inclusive_price' => $item['tax_inclusive_price'],
+						'tax_inclusive_amount' => $item['tax_inclusive_price'] * $item['num'],
+						'tax_exclusive_amount' => $item['tax_inclusive_price'] * $item['num']  * (1- $tax_rate_dict[$item['tax_rate']] / 100),
+						'remark' => $item['remark'] ?? ''
+					]);
+				}
+			}
+			Db::commit();
+			return true;
+		} catch (\Exception $e) {
+			Db::rollback();
+			self::setError($e->getMessage());
+			return false;
+		}
+	}
+	
+	public static function delete(array $params): bool
+	{
+		$detail = QuotationDetail::where('quotation_id','in',$params['id'])->findOrEmpty();
+		if(!$detail->isEmpty()){
+			self::setError('此数据关联了报价明细信息,须删除报价明细信息');
+			return false;
+		}
+		return Quotation::destroy($params['id']);
+	}
+	
     /**
      * @notes 获取报价单详情
      * @param $params
@@ -96,12 +159,8 @@ class QuotationLogic extends BaseLogic
      */
     public static function detail($params): array
     {
-        $data = Quotation::field('id,org_id,dept_id,custom_id,quotation_date,create_user,invoice_type,freight,other_fee,customer_require,remark,annex')->findOrEmpty($params['id']);
-		$org = Orgs::field('name')->where('id',$data['org_id'])->findOrEmpty();
-		$dept = Dept::field('name')->where('id',$data['dept_id'])->findOrEmpty();
+        $data = Quotation::field('id,custom_id,quotation_date,create_user,invoice_type,freight,other_fee,customer_require,remark,annex')->findOrEmpty($params['id']);
 		$custom = Custom::field('name,master_name,master_phone')->where('id',$data['custom_id'])->findOrEmpty();
-		$data['org_name'] = $org['name'];
-		$data['dept_name'] = $dept['name'];
 		$data['custom_name'] = $custom['name'];
 	    $data['custom_master_name'] = $custom['master_name'];
 	    $data['custom_master_phone'] = $custom['master_phone'];
diff --git a/app/adminapi/logic/supervision_connect/SupervisionProjectInfoReportLogic.php b/app/adminapi/logic/supervision_connect/SupervisionProjectInfoReportLogic.php
index a0c648d16..185fc3beb 100644
--- a/app/adminapi/logic/supervision_connect/SupervisionProjectInfoReportLogic.php
+++ b/app/adminapi/logic/supervision_connect/SupervisionProjectInfoReportLogic.php
@@ -126,6 +126,7 @@ class SupervisionProjectInfoReportLogic extends BaseLogic
 	    $data['project_name'] = $project['project_name'];
 	    $data['project_manager'] = $project['project_manager'];
 		$data['severity_text'] = $data->severity_text;
+		$data['info_cate_text'] = $data->info_cate_text;
         return $data->toArray();
     }
 }
\ No newline at end of file
diff --git a/app/adminapi/validate/custom/CustomerDemandSolutionValidate.php b/app/adminapi/validate/custom/CustomerDemandSolutionValidate.php
index 126a5f223..c6937eed6 100644
--- a/app/adminapi/validate/custom/CustomerDemandSolutionValidate.php
+++ b/app/adminapi/validate/custom/CustomerDemandSolutionValidate.php
@@ -16,8 +16,6 @@ namespace app\adminapi\validate\custom;
 
 
 use app\common\model\custom\CustomerDemand;
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
 use app\common\model\project\Project;
 use app\common\validate\BaseValidate;
 
@@ -36,8 +34,6 @@ class CustomerDemandSolutionValidate extends BaseValidate
       */
     protected $rule = [
         'id' => 'require',
-	    'org_id' => 'require|checkOrg',
-	    'dept_id' => 'require|checkDept',
 	    'project_id' => 'require|checkProject',
 	    'customer_demand_id' => 'require|checkCustomerDemand',
 	    'theme' => 'require',
@@ -47,8 +43,6 @@ class CustomerDemandSolutionValidate extends BaseValidate
 	
 	protected $message = [
 		'id.require' => '缺少必要参数',
-		'org_id.require' => '请选择组织',
-		'dept_id.require' => '请选择部门',
 		'project_id.require' => '请选择项目',
 		'customer_demand_id.require' => '请选择客户需求',
 		'theme.require' => '请填写需求主题',
@@ -102,27 +96,6 @@ class CustomerDemandSolutionValidate extends BaseValidate
         return $this->only(['id']);
     }
 	
-	public function checkOrg($value): bool|string
-	{
-		$org = Orgs::where('id',$value)->findOrEmpty();
-		if($org->isEmpty()) {
-			return '组织不存在';
-		}
-		return true;
-	}
-	
-	public function checkDept($value,$rule,$data): bool|string
-	{
-		$dept = Dept::where('id',$value)->findOrEmpty();
-		if($dept->isEmpty()){
-			return '部门不存在';
-		}
-		if($dept['org_id'] != $data['org_id']){
-			return '当前部门不属于所选择的组织';
-		}
-		return true;
-	}
-	
 	public function checkProject($value): bool|string
 	{
 		$project = Project::where('id',$value)->findOrEmpty();
@@ -143,15 +116,5 @@ class CustomerDemandSolutionValidate extends BaseValidate
 		}
 		return true;
 	}
-	
-	public function checkAnnex($value): bool|string
-	{
-		if(!empty($value) && $value != ''){
-			if(!is_array($value)){
-				return '附件格式错误';
-			}
-		}
-		return true;
-	}
 
 }
\ No newline at end of file
diff --git a/app/adminapi/validate/custom/CustomerDemandValidate.php b/app/adminapi/validate/custom/CustomerDemandValidate.php
index 8156a3bc2..29a90b4fe 100644
--- a/app/adminapi/validate/custom/CustomerDemandValidate.php
+++ b/app/adminapi/validate/custom/CustomerDemandValidate.php
@@ -111,15 +111,4 @@ class CustomerDemandValidate extends BaseValidate
 		}
 		return true;
 	}
-	
-	public function checkAnnex($value): bool|string
-	{
-		if(!empty($value) && $value != ''){
-			if(!is_array($value)){
-				return '附件格式错误';
-			}
-		}
-		return true;
-	}
-
 }
\ No newline at end of file
diff --git a/app/adminapi/validate/project/CompetitorValidate.php b/app/adminapi/validate/project/CompetitorValidate.php
index 4feeecb1a..d3702c7a4 100644
--- a/app/adminapi/validate/project/CompetitorValidate.php
+++ b/app/adminapi/validate/project/CompetitorValidate.php
@@ -16,8 +16,6 @@ namespace app\adminapi\validate\project;
 
 
 use app\common\model\custom\CustomerDemand;
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
 use app\common\model\project\Project;
 use app\common\validate\BaseValidate;
 
@@ -36,8 +34,6 @@ class CompetitorValidate extends BaseValidate
       */
     protected $rule = [
         'id' => 'require',
-	    'org_id' => 'require|checkOrg',
-	    'dept_id' => 'require|checkDept',
 	    'project_id' => 'require|checkProject',
 	    'customer_demand_id' => 'require|checkCustomerDemand',
 	    'competitor_name' => 'require',
@@ -47,8 +43,6 @@ class CompetitorValidate extends BaseValidate
 	
 	protected $message = [
 		'id.require' => '缺少必要参数',
-		'org_id.require' => '请选择组织',
-		'dept_id.require' => '请选择部门',
 		'project_id.require' => '请选择项目',
 		'customer_demand_id.require' => '请选择客户需求',
 		'competitor_name.require' => '请填写竞争对手名称',
@@ -101,27 +95,6 @@ class CompetitorValidate extends BaseValidate
         return $this->only(['id']);
     }
 	
-	public function checkOrg($value): bool|string
-	{
-		$org = Orgs::where('id',$value)->findOrEmpty();
-		if($org->isEmpty()) {
-			return '组织不存在';
-		}
-		return true;
-	}
-	
-	public function checkDept($value,$rule,$data): bool|string
-	{
-		$dept = Dept::where('id',$value)->findOrEmpty();
-		if($dept->isEmpty()){
-			return '部门不存在';
-		}
-		if($dept['org_id'] != $data['org_id']){
-			return '当前部门不属于所选择的组织';
-		}
-		return true;
-	}
-	
 	public function checkProject($value): bool|string
 	{
 		$project = Project::where('id',$value)->findOrEmpty();
@@ -143,14 +116,4 @@ class CompetitorValidate extends BaseValidate
 		return true;
 	}
 	
-	public function checkAnnex($value): bool|string
-	{
-		if(!empty($value) && $value != ''){
-			if(!is_array($value)){
-				return '附件格式错误';
-			}
-		}
-		return true;
-	}
-
 }
\ No newline at end of file
diff --git a/app/adminapi/validate/project/ProjectEstimateValidate.php b/app/adminapi/validate/project/ProjectEstimateValidate.php
index 34dce4fcc..4c4ca966d 100644
--- a/app/adminapi/validate/project/ProjectEstimateValidate.php
+++ b/app/adminapi/validate/project/ProjectEstimateValidate.php
@@ -16,11 +16,8 @@ namespace app\adminapi\validate\project;
 
 
 use app\common\model\auth\Admin;
-use app\common\model\custom\Custom;
 use app\common\model\custom\CustomContacts;
 use app\common\model\custom\CustomerDemand;
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
 use app\common\model\dict\DictData;
 use app\common\model\project\Project;
 use app\common\validate\BaseValidate;
@@ -40,8 +37,6 @@ class ProjectEstimateValidate extends BaseValidate
       */
     protected $rule = [
         'id' => 'require',
-	    'org_id' => 'require|checkOrg',
-	    'dept_id' => 'require|checkDept',
 	    'project_id' => 'require|checkProject',
 	    'customer_demand_id' => 'require|checkCustomerDemand',
 	    'estimate_source' => 'require|checkEstimateSource',
@@ -55,8 +50,6 @@ class ProjectEstimateValidate extends BaseValidate
 	
 	protected $message = [
 		'id.require' => '缺少必要参数',
-		'org_id.require' => '请选择组织',
-		'dept_id.require' => '请选择部门',
 		'project_id.require' => '请选择项目',
 		'customer_demand_id.require' => '请选择客户需求',
 		'contact_id.require' => '请选择联系人',
@@ -113,27 +106,6 @@ class ProjectEstimateValidate extends BaseValidate
         return $this->only(['id']);
     }
 	
-	public function checkOrg($value): bool|string
-	{
-		$org = Orgs::where('id',$value)->findOrEmpty();
-		if($org->isEmpty()) {
-			return '组织不存在';
-		}
-		return true;
-	}
-	
-	public function checkDept($value,$rule,$data): bool|string
-	{
-		$dept = Dept::where('id',$value)->findOrEmpty();
-		if($dept->isEmpty()){
-			return '部门不存在';
-		}
-		if($dept['org_id'] != $data['org_id']){
-			return '当前部门不属于所选择的组织';
-		}
-		return true;
-	}
-	
 	public function checkProject($value): bool|string
 	{
 		$project = Project::where('id',$value)->findOrEmpty();
@@ -194,15 +166,5 @@ class ProjectEstimateValidate extends BaseValidate
 		}
 		return true;
 	}
-	
-	public function checkAnnex($value): bool|string
-	{
-		if(!empty($value) && $value != ''){
-			if(!is_array($value)){
-				return '附件格式错误';
-			}
-		}
-		return true;
-	}
 
 }
\ No newline at end of file
diff --git a/app/adminapi/validate/project/ProjectFollowUpValidate.php b/app/adminapi/validate/project/ProjectFollowUpValidate.php
index c8eb3ec7c..83ade5130 100644
--- a/app/adminapi/validate/project/ProjectFollowUpValidate.php
+++ b/app/adminapi/validate/project/ProjectFollowUpValidate.php
@@ -154,15 +154,5 @@ class ProjectFollowUpValidate extends BaseValidate
 		}
 		return true;
 	}
-	
-	public function checkAnnex($value): bool|string
-	{
-		if(!empty($value) && $value != ''){
-			if(!is_array($value)){
-				return '附件格式错误';
-			}
-		}
-		return true;
-	}
 
 }
\ No newline at end of file
diff --git a/app/adminapi/validate/project/ProjectValidate.php b/app/adminapi/validate/project/ProjectValidate.php
index 1fd3b7402..d221b5d94 100644
--- a/app/adminapi/validate/project/ProjectValidate.php
+++ b/app/adminapi/validate/project/ProjectValidate.php
@@ -222,22 +222,11 @@ class ProjectValidate extends BaseValidate
 	
 	public function checkUnitNature($value): bool|string
 	{
-		$dictData = DictData::where('type_value','unit_nature')->column('value');
-		if(!in_array($value,$dictData)){
+		$dictData = DictData::where('type_value', 'unit_nature')->column('value');
+		if (!in_array($value, $dictData)) {
 			return '单位性质无效';
 		}
 		return true;
 	}
-	
-	public function checkAnnex($value): bool|string
-	{
-		if(!empty($value) && $value != ''){
-			$annex =$value;//json_decode($value,true);
-			if(empty($annex) || !is_array($annex)){
-				return '附件格式错误';
-			}
-		}
-		return true;
-	}
 
 }
\ No newline at end of file
diff --git a/app/adminapi/validate/quotation/QuotationValidate.php b/app/adminapi/validate/quotation/QuotationValidate.php
index 11061c911..76364011e 100644
--- a/app/adminapi/validate/quotation/QuotationValidate.php
+++ b/app/adminapi/validate/quotation/QuotationValidate.php
@@ -16,10 +16,9 @@ namespace app\adminapi\validate\quotation;
 
 
 use app\common\model\custom\Custom;
-use app\common\model\dept\Dept;
-use app\common\model\dept\Orgs;
 use app\common\model\dict\DictData;
 use app\common\model\material\Material;
+use app\common\model\quotation\QuotationDetail;
 use app\common\validate\BaseValidate;
 
 
@@ -37,8 +36,6 @@ class QuotationValidate extends BaseValidate
       */
     protected $rule = [
         'id' => 'require',
-	    'org_id' => 'require|checkOrg',
-	    'dept_id' => 'require|checkDept',
         'custom_id' => 'require|checkCustom',
 	    'quotation_date' => 'dateFormat:Y-m-d',
 	    'invoice_type' => 'checkInvoiceType',
@@ -50,8 +47,6 @@ class QuotationValidate extends BaseValidate
 
     protected $message = [
 	    'id.require' => '缺少必要参数',
-	    'org_id.require' => '请选择组织',
-	    'dept_id.require' => '请选择部门',
 	    'custom_id.require' => '请选择客户',
 	    'quotation_date.dateFormat' => '报价日期格式错误',
 	    'freight.require' => '运费不能为空',
@@ -108,27 +103,6 @@ class QuotationValidate extends BaseValidate
         return $this->only(['id']);
     }
 	
-	public function checkOrg($value): bool|string
-	{
-		$org = Orgs::where('id',$value)->findOrEmpty();
-		if($org->isEmpty()){
-			return '组织不存在';
-		}
-		return true;
-	}
-	
-	public function checkDept($value,$rule,$data): bool|string
-	{
-		$dept = Dept::where('id',$value)->findOrEmpty();
-		if($dept->isEmpty()){
-			return '部门不存在';
-		}
-		if($dept['org_id'] != $data['org_id']){
-			return '部门无效';
-		}
-		return true;
-	}
-	
 	public function checkCustom($value): bool|string
 	{
 		$custom = Custom::where('id',$value)->findOrEmpty();
@@ -147,13 +121,16 @@ class QuotationValidate extends BaseValidate
 		return true;
 	}
 	
-	public function checkQuotationDetail($value,$rule,$data): bool|string
+	public function checkQuotationDetail($value): bool|string
 	{
-		$quotation_detail = $value;
-		if(empty($quotation_detail) || !is_array($quotation_detail)){
+		if(empty($value) || !is_array($value)){
 			return '报价明细数据格式错误';
 		}
-		foreach($quotation_detail as $v) {
+		foreach($value as $k=>$v) {
+			if(!empty($v['id'])){
+				$quotation_detail = QuotationDetail::where('id',$v['id'])->findOrEmpty();
+				if($quotation_detail->isEmpty()) return '报价明细列表第'.($k+1).'行报价明细数据不存在';
+			}
 			if(empty($v['product_id'])){
 				return '请选择产品';
 			}else{
@@ -163,39 +140,30 @@ class QuotationValidate extends BaseValidate
 				}
 			}
 			if(empty($v['num'])){
-				return '数量不能为空';
+				return '报价明细列表第'.($k+1).'行数量不能为空';
 			}else{
 				if(!is_numeric($v['num']) || $v['num'] < 0){
-					return '数量必须是大于0的数字';
+					return '报价明细列表第'.($k+1).'行数量必须是大于0的数字';
 				}
 			}
 			if(empty($v['tax_rate'])){
-				return '税率不能为空';
+				return '报价明细列表第'.($k+1).'行税率不能为空';
 			}else{
 				$tax_rate_dict_data = DictData::where('type_value','tax_rate')->column('value');
 				if(!in_array($v['tax_rate'],$tax_rate_dict_data)){
-					return '税率无效';
+					return '报价明细列表第'.($k+1).'行税率无效';
 				}
 			}
 			if(empty($v['tax_inclusive_price'])){
-				return '含税单价不能为空';
+				return '报价明细列表第'.($k+1).'行含税单价不能为空';
 			}else{
 				if(!is_numeric($v['tax_inclusive_price']) || $v['tax_inclusive_price'] < 0){
-					return '含税单价必须是大于0的数字';
+					return '报价明细列表第'.($k+1).'行含税单价必须是大于0的数字';
 				}
 			}
 		}
 		return true;
 	}
 	
-	public function checkAnnex($value): bool|string
-	{
-		if(!empty($value) && $value != ''){
-			if(!is_array($value)){
-				return '附件格式错误';
-			}
-		}
-		return true;
-	}
 
 }
\ No newline at end of file
diff --git a/app/common/model/custom/CustomerDemandSolution.php b/app/common/model/custom/CustomerDemandSolution.php
index a13b3a4dd..0e51e4ade 100644
--- a/app/common/model/custom/CustomerDemandSolution.php
+++ b/app/common/model/custom/CustomerDemandSolution.php
@@ -30,11 +30,6 @@ class CustomerDemandSolution extends BaseModel
     protected $name = 'customer_demand_solution';
     protected $deleteTime = 'delete_time';
 	
-	public function getAnnexAttr($value)
-	{
-		return !empty($value) ? json_decode($value,true) : '';
-	}
-	
 	public function getSubmissionTimeAttr($value): string
 	{
 		return !empty($value) ? date('Y-m-d',$value) : '';
diff --git a/app/common/model/project/Competitor.php b/app/common/model/project/Competitor.php
index bc39d0f62..1081e3018 100644
--- a/app/common/model/project/Competitor.php
+++ b/app/common/model/project/Competitor.php
@@ -29,9 +29,4 @@ class Competitor extends BaseModel
     use SoftDelete;
     protected $name = 'competitor';
     protected $deleteTime = 'delete_time';
-	
-	public function getAnnexAttr($value)
-	{
-		return !empty($value) ? json_decode($value,true) : '';
-	}
 }
\ No newline at end of file
diff --git a/app/common/model/project/Project.php b/app/common/model/project/Project.php
index 9717d23ff..4f97f68a1 100644
--- a/app/common/model/project/Project.php
+++ b/app/common/model/project/Project.php
@@ -121,9 +121,4 @@ class Project extends BaseModel
 	{
         return empty($value) ? '' : date('Y-m-d', $value);
     }
-	
-	public function getAnnexAttr($value)
-	{
-		return !empty($value) ? json_decode($value,true) : '';
-	}
 }
\ No newline at end of file
diff --git a/app/common/model/project/ProjectEstimate.php b/app/common/model/project/ProjectEstimate.php
index 7834223dd..a17f2fc80 100644
--- a/app/common/model/project/ProjectEstimate.php
+++ b/app/common/model/project/ProjectEstimate.php
@@ -43,11 +43,6 @@ class ProjectEstimate extends BaseModel
 		return $dictData[$data['invoice_type']];
 	}
 	
-	public function getAnnexAttr($value)
-	{
-		return !empty($value) ? json_decode($value,true) : '';
-	}
-	
 	public function getQuotationDateAttr($value): string
 	{
 		return empty($value) ? '' : date('Y-m-d', $value);
diff --git a/app/common/model/project/ProjectFollowUp.php b/app/common/model/project/ProjectFollowUp.php
index 9ef41ae90..f305a940a 100644
--- a/app/common/model/project/ProjectFollowUp.php
+++ b/app/common/model/project/ProjectFollowUp.php
@@ -64,9 +64,4 @@ class ProjectFollowUp extends BaseModel
 	{
 		return !empty($value) ? date('Y-m-d',$value) : '';
 	}
-	
-	public function getAnnexAttr($value)
-	{
-		return !empty($value) ? json_decode($value) : '';
-	}
 }
\ No newline at end of file
diff --git a/app/common/model/quotation/Quotation.php b/app/common/model/quotation/Quotation.php
index 78c796c20..4d69a230b 100644
--- a/app/common/model/quotation/Quotation.php
+++ b/app/common/model/quotation/Quotation.php
@@ -41,8 +41,4 @@ class Quotation extends BaseModel
 		$dictData[0]='';
 		return $dictData[$data['invoice_type']];
 	}
-	
-	public function getAnnexAttr($value){
-		return !empty($value) ? json_decode($value,true) : '';
-	}
 }
\ No newline at end of file