|
@@ -6,6 +6,7 @@ use App\Model\BasicType;
|
|
|
use App\Model\BookingList;
|
|
|
use App\Model\Depart;
|
|
|
use App\Model\Employee;
|
|
|
+use App\Model\PaymentReceipt;
|
|
|
use App\Model\PurchaseOrder;
|
|
|
use App\Model\PurchaseOrderFile;
|
|
|
use App\Model\PurchaseOrderInfo;
|
|
@@ -35,61 +36,12 @@ class PurchaseOrderSpecialService extends Service
|
|
|
|
|
|
try{
|
|
|
DB::beginTransaction();
|
|
|
- $material_model = PurchaseOrder::where('order_number',$data['order_number'])->first();
|
|
|
+ $material_model = PurchaseOrderSpecial::where('order_number',$data['order_number'])->first();
|
|
|
$material_model->order_number = $data['order_number'];
|
|
|
-// $material_model->depart_id = $data['depart_id'] ?? 0;
|
|
|
-// $material_model->top_depart_id = $data['top_depart_id'] ?? 0;
|
|
|
- $material_model->total = $data['total'] ?? 0;
|
|
|
$material_model->other_fee = $data['other_fee'] ?? 0;
|
|
|
- $material_model->discount_fee = $data['discount_fee'] ?? 0;
|
|
|
- $material_model->purchase_total = $data['purchase_total'] ?? 0;
|
|
|
- $material_model->supplier = $data['supplier'] ?? 0;
|
|
|
- $material_model->purchase_id = $data['purchase_id'] ?? 0;
|
|
|
- $material_model->order_type = $data['order_type'];
|
|
|
- $material_model->sales_order_id = $data['sales_order_id'] ?? 0;
|
|
|
$material_model->mark = $data['mark'] ?? '';
|
|
|
- $material_model->storehouse_id = $data['storehouse_id'];
|
|
|
$material_model->save();
|
|
|
|
|
|
- $time = time();
|
|
|
- PurchaseOrderInfo::where('order_number',$data['order_number'])
|
|
|
- ->where('del_time',0)
|
|
|
- ->update(['del_time' => time()]);
|
|
|
- if(!empty($data['product'])){
|
|
|
- $sub = [];
|
|
|
- foreach ($data['product'] as $value){
|
|
|
- $sub[] = [
|
|
|
- 'purchase_order_id' => $material_model->id,
|
|
|
- 'order_number' => $data['order_number'],
|
|
|
- 'storehouse_id' => $data['storehouse_id'] ?? 0,
|
|
|
- 'product_id' => $value['product_id'],
|
|
|
- 'number' => $value['number'],
|
|
|
- 'basic_type_id' => $value['basic_type_id'],
|
|
|
- 'price' => $value['price'],
|
|
|
- 'mark' => $value['mark'] ?? '',
|
|
|
- ];
|
|
|
- }
|
|
|
- PurchaseOrderInfo::insert($sub);
|
|
|
- }
|
|
|
-
|
|
|
- PurchaseOrderFile::where('order_number',$data['order_number'])
|
|
|
- ->where('del_time',0)
|
|
|
- ->update(['del_time' => time()]);
|
|
|
- if(! empty($data['file'])){
|
|
|
- $insert = [];
|
|
|
- foreach ($data['file'] as $value){
|
|
|
- $insert[] = [
|
|
|
- 'purchase_order_id' => $material_model->id,
|
|
|
- 'order_number' => $data['order_number'],
|
|
|
- 'file' => $value['url'],
|
|
|
- 'type' => PurchaseOrderFile::type_one,
|
|
|
- 'name' => $value['name'],
|
|
|
- 'crt_time' => $time,
|
|
|
- ];
|
|
|
- }
|
|
|
- PurchaseOrderFile::insert($insert);
|
|
|
- }
|
|
|
-
|
|
|
DB::commit();
|
|
|
}catch (\Throwable $e){
|
|
|
DB::rollBack();
|
|
@@ -179,16 +131,16 @@ class PurchaseOrderSpecialService extends Service
|
|
|
|
|
|
$order = PurchaseOrderSpecial::where('order_number',$data['order_number'])
|
|
|
->where('del_time',0)
|
|
|
- ->select('id','order_number','depart_id','mark','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','crt_time','storehouse_id','top_depart_id','total')
|
|
|
+ ->select('id','order_number','depart_id','mark','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','crt_time','storehouse_id','top_depart_id','total','other_fee')
|
|
|
->first();
|
|
|
- if(empty($order)) return [false, '采购订单不存在或已被删除'];
|
|
|
+ if(empty($order)) return [false, '虚拟采购单不存在或已被删除'];
|
|
|
$order = $order->toArray();
|
|
|
$order['file'] = [];
|
|
|
- $order['order_type_title'] = "虚拟采购单";
|
|
|
$order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
|
|
|
- $supplier = Supplier::where('id',$order['supplier'])->first();
|
|
|
+ $supplier = Depart::where('id',$order['supplier'])->first();
|
|
|
$order['supplier_title'] = $supplier->title ?? '';
|
|
|
- $order['state_title'] = PurchaseOrder::$name[$order['state']] ?? '';
|
|
|
+ $order['state_title'] = PurchaseOrderSpecial::$name[$order['state']] ?? '';
|
|
|
+ $order['type_title'] = PurchaseOrderSpecial::$type[$order['type']] ?? '';
|
|
|
$sales = SalesOrder::where('id',$order['sales_order_id'])->value('order_number');
|
|
|
$order['sales_order_number'] = $sales;
|
|
|
$emp_map = Employee::whereIn('id',array_unique(array_merge_recursive([$order['purchase_id']],[$order['crt_id']])))
|
|
@@ -215,6 +167,19 @@ class PurchaseOrderSpecialService extends Service
|
|
|
$order['crt_name'] = $emp_map[$order['crt_id']] ?? '';
|
|
|
$order['crt_time'] = $order['crt_time'] ? date("Y-m-d H:i:s",$order['crt_time']): '';
|
|
|
|
|
|
+ //回款单信息 审核过的
|
|
|
+ $order['payment_receipt_list'] = (new PaymentReceiptService())->getPaymentReceiptDataList($order,PaymentReceipt::data_type_three);
|
|
|
+ //坏账金额 = 红冲金额
|
|
|
+ $order['payment_receipt_list']['bad_amount'] = $order['payment_receipt_list']['red_amount'];
|
|
|
+ //未回款金额 = 总金额 - 已回款金额 - 坏账金额 - 红冲
|
|
|
+ $total = bcadd($order['purchase_total'], $order['other_fee'],2);
|
|
|
+ $not_receipt_amount = bcsub($total,$order['payment_receipt_list']['receipt_amount'],2);
|
|
|
+ $order['payment_receipt_list']['not_receipt_amount'] = $not_receipt_amount;
|
|
|
+ //回款单信息 审核过的
|
|
|
+
|
|
|
+ $order['not_payment_receipt_amount'] = bcsub($order['purchase_total'],$order['payment_receipt_list']['not_confirm_receipt_amount'],2);
|
|
|
+
|
|
|
+
|
|
|
return [true, $order];
|
|
|
}
|
|
|
|
|
@@ -225,23 +190,19 @@ class PurchaseOrderSpecialService extends Service
|
|
|
*/
|
|
|
public function del($data){
|
|
|
if($this->isEmpty($data,'order_number')) return [false,'请选择数据!'];
|
|
|
- $order = PurchaseOrder::where('del_time',0)->where('order_number',$data['order_number'])->first();
|
|
|
- if(empty($order)) return [false,'采购单不存在或已被删除'];
|
|
|
+ $order = PurchaseOrderSpecial::where('del_time',0)->where('order_number',$data['order_number'])->first();
|
|
|
+ if(empty($order)) return [false,'虚拟采购单不存在或已被删除'];
|
|
|
$order = $order->toArray();
|
|
|
- if($order['state'] > PurchaseOrder::STATE_ZERO) return [false,'请确认采购订单状态,删除失败!'];
|
|
|
+ if($order['state'] > PurchaseOrderSpecial::STATE_ZERO) return [false,'请确认虚拟采购单状态,删除失败!'];
|
|
|
|
|
|
try{
|
|
|
DB::beginTransaction();
|
|
|
- PurchaseOrder::where('order_number',$data['order_number'])->where('del_time',0)->update([
|
|
|
+ PurchaseOrderSpecial::where('order_number',$data['order_number'])->where('del_time',0)->update([
|
|
|
'del_time'=>time()
|
|
|
]);
|
|
|
- PurchaseOrderInfo::where('order_number',$data['order_number'])->where('del_time',0)->update([
|
|
|
+ PurchaseOrderSpecialInfo::where('order_number',$data['order_number'])->where('del_time',0)->update([
|
|
|
'del_time'=>time()
|
|
|
]);
|
|
|
- PurchaseOrderFile::where('order_number',$data['order_number'])
|
|
|
- ->where('del_time',0)
|
|
|
- ->update(['del_time' => time()]);
|
|
|
- (new RangeService())->RangeDelete($order['id'],SeeRange::type_five);
|
|
|
|
|
|
DB::commit();
|
|
|
}catch (\Throwable $e){
|
|
@@ -260,10 +221,9 @@ class PurchaseOrderSpecialService extends Service
|
|
|
*/
|
|
|
public function getList($data,$user){
|
|
|
$model = PurchaseOrderSpecial::Clear($user,$data);
|
|
|
- $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','storehouse_id','total')
|
|
|
+ $model = $model->where('del_time',0)->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','sales_order_id','supplier','purchase_id','purchase_total','storehouse_id','total','other_fee','type')
|
|
|
->orderby('id', 'desc');
|
|
|
if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
|
|
|
- if(! empty($data['depart_id'])) $model->where('depart_id', $data['depart_id']);
|
|
|
if(isset($data['state'])) $model->where('state',$data['state']);
|
|
|
if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
|
|
|
$return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
|
|
@@ -282,6 +242,13 @@ class PurchaseOrderSpecialService extends Service
|
|
|
$model->where('crt_time','<=',$end);
|
|
|
}
|
|
|
}
|
|
|
+ if(! empty($data['supplier_title'])) {
|
|
|
+ $id = Depart::where('del_time',0)
|
|
|
+ ->where('parent_id',0)
|
|
|
+ ->where('title', 'LIKE', '%'.$data['supplier_title'].'%')
|
|
|
+ ->select('id')->get()->toArray();
|
|
|
+ $model->whereIn('supplier',array_column($id,'id'));
|
|
|
+ }
|
|
|
|
|
|
$list = $this->limit($model,'',$data);
|
|
|
$list = $this->fillListData($list,$data,$user);
|
|
@@ -297,36 +264,51 @@ class PurchaseOrderSpecialService extends Service
|
|
|
public function fillListData($data,$ergs,$user){
|
|
|
if(empty($data['data'])) return $data;
|
|
|
|
|
|
- $depart_id = array_unique(array_column($data['data'],'depart_id'));
|
|
|
- $depart_map = Depart::whereIn('id',$depart_id)
|
|
|
- ->pluck('title','id')
|
|
|
- ->toArray();
|
|
|
-
|
|
|
$emp_id = array_unique(array_merge_recursive(array_column($data['data'],'crt_id'),array_column($data['data'],'purchase_id')));
|
|
|
$emp_map = Employee::whereIn('id',$emp_id)
|
|
|
->pluck('emp_name','id')
|
|
|
->toArray();
|
|
|
|
|
|
$sales = SalesOrder::whereIn('id',array_unique(array_column($data['data'],'sales_order_id')))->pluck('order_number','id')->toArray();
|
|
|
- $storehouse = Storehouse::whereIn('id',array_unique(array_column($data['data'],'storehouse_id')))
|
|
|
+ $supplier = Depart::whereIn('id',array_unique(array_column($data['data'],'supplier')))
|
|
|
->pluck('title','id')
|
|
|
->toArray();
|
|
|
- $supplier = Supplier::whereIn('id',array_unique(array_column($data['data'],'supplier')))
|
|
|
- ->select('title','id','is_main')
|
|
|
- ->get()
|
|
|
- ->toArray();
|
|
|
- $supplier_map = array_column($supplier,null,'id');
|
|
|
+
|
|
|
+ list($for_amount_list, $for_amount_list1) = (new PaymentReceiptService())->getPaymentReceiptDataCountList(array_column($data['data'],'order_number'));
|
|
|
+
|
|
|
foreach ($data['data'] as $key => $value){
|
|
|
- $supplier_tmp = $supplier_map[$value['supplier']] ?? [];
|
|
|
$data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
|
|
|
- $data['data'][$key]['depart_name'] = $depart_map[$value['depart_id']] ?? '';
|
|
|
$data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
|
|
|
$data['data'][$key]['purchase_name'] = $emp_map[$value['purchase_id']] ?? '';
|
|
|
$data['data'][$key]['state_title'] = PurchaseOrderSpecial::$name[$value['state']] ?? '';
|
|
|
$data['data'][$key]['sales_order_number'] = $sales[$value['sales_order_id']] ?? '';
|
|
|
- $data['data'][$key]['storehouse_title'] = $storehouse[$value['storehouse_id']] ?? '';
|
|
|
- $data['data'][$key]['supplier_title'] = $supplier_tmp['title'] ?? '';
|
|
|
- $data['data'][$key]['order_type_title'] = '虚拟采购单';
|
|
|
+ $data['data'][$key]['supplier_title'] = $supplier[$value['supplier']] ?? '';
|
|
|
+ $data['data'][$key]['type_title'] = PurchaseOrderSpecial::$type[$value['type']] ?? "";
|
|
|
+
|
|
|
+ //用于计算--------
|
|
|
+ //已收(审核后)
|
|
|
+ $one1 = $for_amount_list1[$value['order_number'] . PaymentReceipt::type_one] ?? 0;
|
|
|
+ $data['data'][$key]['checked_payment_receipt_amount'] = $one1;
|
|
|
+ //已收
|
|
|
+ $one = $for_amount_list[$value['order_number'] . PaymentReceipt::type_one] ?? 0;
|
|
|
+ $data['data'][$key]['payment_receipt_amount'] = $one;
|
|
|
+ //已红冲
|
|
|
+ $three = $for_amount_list[$value['order_number'] . PaymentReceipt::type_three] ?? 0;
|
|
|
+ $data['data'][$key]['red_amount'] = $three;
|
|
|
+ //用于计算--------
|
|
|
+
|
|
|
+ //用于统计--------
|
|
|
+ $red = $for_amount_list1[$value['order_number'] . PaymentReceipt::type_three] ?? 0;
|
|
|
+ //已收金额
|
|
|
+ $fee1 = bcsub($one1 ,$red,2);
|
|
|
+ $data['data'][$key]['fee1'] = $fee1;
|
|
|
+ //未收金额
|
|
|
+ $total = bcadd($value['purchase_total'],$value['other_fee'],2);
|
|
|
+ $fee2 = bcsub($total, $fee1,2);
|
|
|
+ $data['data'][$key]['fee2'] = $fee2;
|
|
|
+ //红冲金额
|
|
|
+ $data['data'][$key]['fee3'] = $red;
|
|
|
+ //用于统计--------
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
@@ -339,66 +321,24 @@ class PurchaseOrderSpecialService extends Service
|
|
|
* @return array
|
|
|
*/
|
|
|
public function orderRule(&$data, $user, $is_check = true){
|
|
|
- if(empty($data['order_type'])) return [false,'采购订单类型不能为空'];
|
|
|
- if($data['order_type'] == PurchaseOrder::Order_type_two && empty($data['sales_order_id'])) return [false, PurchaseOrder::$order_type[PurchaseOrder::Order_type_two] . '必须选择合同'];
|
|
|
- if($this->isEmpty($data,'product')) return [false,'产品不能为空'];
|
|
|
- if(empty($data['storehouse_id'])) return [false,'请选择仓库'];
|
|
|
- if(! empty($data['other_fee'])){
|
|
|
- $res = $this->checkNumber($data['other_fee']);
|
|
|
- if(! $res) return [false, '其它费用请输入不超过两位小数并且大于0的数值'];
|
|
|
- }
|
|
|
- if(! empty($data['discount_fee'])){
|
|
|
- $res = $this->checkNumber($data['discount_fee']);
|
|
|
- if(! $res) return [false, '优惠金额请输入不超过两位小数并且大于0的数值'];
|
|
|
- }
|
|
|
- if(! empty($data['total'])){
|
|
|
- $res = $this->checkNumber($data['total']);
|
|
|
- if(! $res) return [false, '产品总价请输入不超过两位小数并且大于0的数值'];
|
|
|
- }
|
|
|
- if(! empty($data['purchase_total'])){
|
|
|
- $res = $this->checkNumber($data['purchase_total']);
|
|
|
- if(! $res) return [false, '采购总价请输入不超过两位小数并且大于0的数值'];
|
|
|
- }
|
|
|
- foreach ($data['product'] as $value){
|
|
|
- if(empty($value['number'])) return [false,'产品数量不能为空'];
|
|
|
- $res = $this->checkNumber($value['number']);
|
|
|
- if(! $res) return [false,'请输入正确的产品数量'];
|
|
|
- }
|
|
|
+ if(! isset($data['mark']) && ! isset($data['other_fee'])) return [false, '请填写更新的内容'];
|
|
|
+ if(isset($data['other_fee']) && ! is_numeric($data['other_fee'])) return [false, '其他费用请填写正确的数值'];
|
|
|
|
|
|
//所属部门 以及 顶级部门
|
|
|
if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
|
|
|
$data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
|
|
|
|
|
|
if($is_check){
|
|
|
- $order_number = (new OrderNoService())->createOrderNumber(PurchaseOrder::prefix);
|
|
|
- if(empty($order_number)) return [false,'采购单号生成失败!'];
|
|
|
+ $order_number = (new OrderNoService())->createOrderNumber(PurchaseOrderSpecial::prefix);
|
|
|
+ if(empty($order_number)) return [false,'虚拟采购单号生成失败!'];
|
|
|
$data['order_number'] = $order_number;
|
|
|
}else{
|
|
|
- if($this->isEmpty($data,'order_number')) return [false,'采购单号不能为空!'];
|
|
|
+ if($this->isEmpty($data,'order_number')) return [false,'虚拟采购单号不能为空!'];
|
|
|
+ $purchase = PurchaseOrderSpecial::where('del_time',0)->where('order_number',$data['order_number'])->first();
|
|
|
+ if(empty($purchase)) return [false, '虚拟采购单不存在或已被删除'];
|
|
|
+ if($purchase->state > PurchaseOrderSpecial::STATE_ZERO) return [false,'请确认虚拟采购单单据状态,修改失败'];
|
|
|
}
|
|
|
|
|
|
return [true, ''];
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * 采购单确认
|
|
|
- * @param $data
|
|
|
- * @param $user
|
|
|
- * @return array
|
|
|
- */
|
|
|
- public function purchaseOrderConfirm($data,$user){
|
|
|
- if(empty($data['order_number'])) return [false, '请选择数据'];
|
|
|
-
|
|
|
- $order = PurchaseOrder::where('order_number',$data['order_number'])
|
|
|
- ->where('del_time',0)
|
|
|
- ->first();
|
|
|
- if(empty($order)) return [false, '采购订单不存在或已被删除'];
|
|
|
- if($order->state != PurchaseOrder::STATE_ZERO) return [false, '请确认采购订单状态,操作失败'];
|
|
|
-
|
|
|
- PurchaseOrder::where('order_number',$data['order_number'])
|
|
|
- ->where('del_time',0)
|
|
|
- ->update(['state' => PurchaseOrder::STATE_ONE]);
|
|
|
-
|
|
|
- return [true,''];
|
|
|
- }
|
|
|
}
|