| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- <?php
- namespace App\Http\Controllers;
- use App\Components\AsyncResponse;
- use App\Filters\ProcurementCheckSheetFilters;
- use App\Filters\ProcurementFilters;
- use App\Http\Requests\Procurement\EnquiryRequest;
- use App\Http\Requests\Procurement\ProcurementRequest;
- use App\Http\Requests\Procurement\ProofRequest;
- use App\Material;
- use App\Procurement;
- use App\ProcurementCheckSheet;
- use App\ProcurementDeliverie;
- use App\ProcurementTotalBill;
- use App\Services\common\ExportService;
- use App\Services\OwnerMaterialService;
- use App\Services\ProcurementTotalBillService;
- use App\Supplier;
- use Carbon\Traits\Date;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- class ProcurementController extends Controller
- {
- use AsyncResponse;
- private function newProcurement($param){
- $procurement=new Procurement([
- 'owner_material_id'=>$param['owner_material_id'],
- 'quantity'=>$param['quantity'],
- 'amount'=>$param['amount'],
- 'unit_price'=>$param['unit_price'],
- 'initiator'=>Auth::user()['id'],
- 'type'=>0,
- ]);
- $procurement->save();
- $number_id=$procurement['id'];
- $procurement_code='BSHC';
- $procurement_code .= date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
- $procurement->update(['code'=>$procurement_code]);
- return $procurement;
- }
- public function index(Request $request,ProcurementFilters $filters)
- {
- $this->gate('采购管理-采购-查询');
- $paginateParams=$request->input();
- $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
- $procurements = Procurement::query()
- ->filter($filters)
- ->with(['initiator','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
- $query->with('customer')->whereIn('id',$owner_ids);
- }])->paginate($param['paginate'] ?? 50);
- /** @var OwnerMaterialService $ownerMaterialService*/
- $ownerMaterialService=app(OwnerMaterialService::class);
- $owners=$ownerMaterialService->getOwnerPermittingWithMaterial();
- $materials=Material::query()->select('id','name')->get();
- $date=date('Y-m-d');
- $countReceive=ProcurementDeliverie::query()->where('signed_at',$date)->count();
- $countProcurement=Procurement::query()->where('type',0)->where('created_at','like',$date.'%')->count();
- return view('procurement/procurement/index',compact('procurements','owners','materials','paginateParams','countReceive','countProcurement'));
- }
- public function create()
- {
- $this->gate('采购管理-采购-新建');
- /** @var OwnerMaterialService $ownerMaterialService*/
- $ownerMaterialService=app(OwnerMaterialService::class);
- $owners=$ownerMaterialService->getOwnerPermittingWithMaterial();
- return view('procurement/procurement/create',compact('owners'));
- }
- public function store(Request $request)
- {
- $this->gate('采购管理-采购-新建');
- $param=$request->all(['owner_material_id','quantity','amount','unit_price']);
- $procurement=$this->newProcurement($param);
- return redirect('procurement/procurement/index')->with('successTip','新采购单“'.$procurement->code.'”添加成功');
- }
- public function createProcurement(ProcurementRequest $request)
- {
- $this->gate('采购管理-采购-新建');
- $request->validated();
- $param=$request->all(['owner_material_id','quantity','amount','unit_price']);
- try {
- $procurement=$this->newProcurement($param);
- $procurement = $procurement->loadMissing(['initiator','ownerMaterial.material','ownerMaterial.owner.customer']);
- if ($procurement) return ['success' => true,'data' => $procurement];
- else return ['success' => false, 'message' => '添加失败'];
- } catch (\Exception $e) {
- return ['success' => false,'message' => $e->getMessage()];
- }
- }
- public function createEnquiry(EnquiryRequest $request)
- {
- $this->gate('采购管理-采购-新建');
- $request->validated();
- $param=$request->all(['owner_material_id']);
- try {
- $procurement=new Procurement([
- 'owner_material_id'=>$param['owner_material_id'],
- 'quantity'=>0,
- 'amount'=>0,
- 'unit_price'=>0,
- 'initiator'=>Auth::user()['id'],
- 'type'=>1,
- ]);
- $procurement->save();
- $number_id=$procurement['id'];
- $procurement_code='BSHC';
- $procurement_code .= date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
- $procurement->update(['code'=>$procurement_code]);
- $procurement = $procurement->loadMissing(['initiator','ownerMaterial.material','ownerMaterial.owner.customer']);
- if ($procurement) return ['success' => true,'data' => $procurement];
- else return ['success' => false, 'message' => '添加失败'];
- } catch (\Exception $e) {
- return ['success' => false,'message' => $e->getMessage()];
- }
- }
- public function createProof(ProofRequest $request)
- {
- $this->gate('采购管理-采购-新建');
- $request->validated();
- $param=$request->all(['owner_material_id']);
- try {
- $procurement=new Procurement([
- 'owner_material_id'=>$param['owner_material_id'],
- 'quantity'=>1,
- 'amount'=>0,
- 'unit_price'=>0,
- 'initiator'=>Auth::user()['id'],
- 'type'=>2,
- ]);
- $procurement->save();
- $number_id=$procurement['id'];
- $procurement_code='BSHC';
- $procurement_code .= date ("ymd").str_pad($number_id>99999?$number_id%99999:$number_id,4,"0",STR_PAD_LEFT);
- $procurement->update(['code'=>$procurement_code]);
- $procurement = $procurement->loadMissing(['initiator','ownerMaterial.material','ownerMaterial.owner.customer']);
- if ($procurement) return ['success' => true,'data' => $procurement];
- else return ['success' => false, 'message' => '添加失败'];
- } catch (\Exception $e) {
- return ['success' => false,'message' => $e->getMessage()];
- }
- }
- public function show(Procurement $procurement)
- {
- //
- }
- public function edit(Procurement $procurement)
- {
- //
- }
- public function update(Request $request, Procurement $procurement)
- {
- //
- }
- public function destroy(Procurement $procurement)
- {
- //
- }
- public function checkBill(Request $request,ProcurementCheckSheetFilters $filters)
- {
- $this->gate('采购管理-财务-对账单');
- $paginateParams=$request->input();
- $procurementCheckSheets=ProcurementCheckSheet::query()
- ->filter($filters)
- ->with(['procurementDelivery.procurement.supplier','procurementDelivery.procurement.ownerMaterial.material','procurementDelivery.receiver'])
- ->paginate($param['paginate'] ?? 50);
- $suppliers=Supplier::query()->select('id','name')->get();
- $materials=Material::query()->select('id','name')->get();
- return view('procurement/finance/checkBill',compact('procurementCheckSheets','suppliers','paginateParams','materials'));
- }
- public function fillInvoice(Request $request){
- $this->gate('采购管理-财务-对账单');
- $id=$request->input('procurementCheckSheetId');
- $invoice_number=$request->input('invoice_number');
- try {
- $procurementCheckSheet=ProcurementCheckSheet::query()->where('id',$id)->update(['invoice_number'=>$invoice_number]);
- if ($procurementCheckSheet) return ['success' => true,'data' => $invoice_number];
- else return ['success' => false, 'message' => '添加失败'];
- } catch (\Exception $e) {
- return ['success' => false,'message' => $e->getMessage()];
- }
- }
- public function procurementBill(Request $request,ProcurementFilters $filters)
- {
- $this->gate('采购管理-财务-采购账单');
- $paginateParams=$request->input();
- $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
- $owners=app("OwnerService")->getIntersectPermitting();
- $materials=Material::query()->select('id','name')->get();
- $suppliers=Supplier::query()->select('id','name')->get();
- $procurements = Procurement::query()
- ->filter($filters)
- ->with(['initiator','supplier','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
- $query->with('customer')->whereIn('id',$owner_ids);
- }])->paginate($param['paginate'] ?? 50);
- return view('procurement/finance/procurementBill',compact('suppliers','materials','owners','paginateParams','procurements'));
- }
- public function monthlyBillReport(Request $request)
- {
- $this->gate('采购管理-财务-月账单报表');
- $paginateParams=$request->input();
- /** @var ProcurementTotalBillService $procurementTotalBillService*/
- $procurementTotalBillService=app(ProcurementTotalBillService::class);
- $procurementTotalBills=$procurementTotalBillService->paginate($paginateParams);
- $suppliers=Supplier::query()->select('id','name')->get();
- return view('procurement/finance/monthlyBillReport',compact('suppliers','procurementTotalBills','paginateParams'));
- }
- //采购导出
- public function procurementExport(Request $request,ProcurementFilters $filters){
- $this->gate('采购管理-采购-查询');
- $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
- $procurements = Procurement::query()
- ->filter($filters)
- ->with(['initiator','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
- $query->with('customer')->whereIn('id',$owner_ids);
- }])->get();
- $procurementStatus=Procurement::status;
- $procurementType=Procurement::type;
- $row = ['采购编号','项目','单据类型','采购公司','耗材编号','耗材','尺寸大小','特殊要求','材质规格','采购数量','销售单价(元)','送货数量','销售总价(元)','采购单状态','联系方式'];
- $list = [];
- foreach ($procurements as $procurement){
- $list[] = [
- $procurement->code,
- $procurement->ownerMaterial->owner ? $procurement->ownerMaterial->owner->name :'',
- is_null($procurement->type) ? '' :$procurementType[$procurement->type],
- $procurement->ownerMaterial->owner->customer ? $procurement->ownerMaterial->owner->customer->company_name :'',
- $procurement->ownerMaterial->material ? $procurement->ownerMaterial->material->code :'',
- $procurement->ownerMaterial->material ? $procurement->ownerMaterial->material->name :'',
- $procurement->ownerMaterial ? $procurement->ownerMaterial->size :'',
- $procurement->ownerMaterial ? $procurement->ownerMaterial->special :'',
- $procurement->ownerMaterial ? $procurement->ownerMaterial->specification :'',
- $procurement->quantity,
- $procurement->unit_price,
- '',//送货数量
- '',//销售总价
- is_null($procurement->status) ? '' :$procurementStatus[$procurement->status],
- $procurement->ownerMaterial->owner->customer ? $procurement->ownerMaterial->owner->customer->phone :'',
- ];
- }
- return app(ExportService::class)->json($row,$list,"采购管理-采购报表记录");
- }
- //对账单报表导出
- public function checkBillExport(Request $request,ProcurementCheckSheetFilters $filters){
- $this->gate('采购管理-财务-对账单');
- $procurementCheckSheets=ProcurementCheckSheet::query()
- ->filter($filters)
- ->with(['procurementDelivery.procurement.supplier','procurementDelivery.procurement.ownerMaterial.material','procurementDelivery.receiver'])
- ->get();
- $procurementCheckSheetStatus=ProcurementCheckSheet::status;
- $row = ['采购编号','采购日期','送货日期','供应商名称','耗材编号','耗材','采购数量','送货数量','签收人','签收日期','应付金额','发票号','状态'];
- $list = [];
- foreach ($procurementCheckSheets as $procurementCheckSheet){
- $list[] = [
- $procurementCheckSheet->procurementDelivery->procurement ? $procurementCheckSheet->procurementDelivery->procurement->code : '',
- $procurementCheckSheet->procurementDelivery->procurement ? $procurementCheckSheet->procurementDelivery->procurement->created_at :'',
- $procurementCheckSheet->procurementDelivery ? $procurementCheckSheet->procurementDelivery->created_at :'',
- $procurementCheckSheet->procurementDelivery->procurement->supplier ? $procurementCheckSheet->procurementDelivery->procurement->supplier->name :'',
- $procurementCheckSheet->procurementDelivery->procurement->ownerMaterial->material ? $procurementCheckSheet->procurementDelivery->procurement->ownerMaterial->material->code :'',
- $procurementCheckSheet->procurementDelivery->procurement->ownerMaterial->material ? $procurementCheckSheet->procurementDelivery->procurement->ownerMaterial->material->name :'',
- $procurementCheckSheet->procurementDelivery->procurement ? $procurementCheckSheet->procurementDelivery->procurement->quantity :'',
- $procurementCheckSheet->procurementDelivery ? $procurementCheckSheet->procurementDelivery->amount :'',
- $procurementCheckSheet->procurementDelivery->receiver ? $procurementCheckSheet->procurementDelivery->receiver->name :'',
- $procurementCheckSheet->procurementDelivery ? $procurementCheckSheet->procurementDelivery->signed_at :'',
- $procurementCheckSheet->account_payable,
- $procurementCheckSheet->invoice_number,
- is_null($procurementCheckSheet->status) ? '' :$procurementCheckSheetStatus[$procurementCheckSheet->status],
- ];
- }
- return app(ExportService::class)->json($row,$list,"采购管理-对账单报表记录");
- }
- //采购账单导出
- public function procurementBillExport(Request $request,ProcurementFilters $filters){
- $this->gate('采购管理-财务-采购账单');
- $owner_ids=app('UserService')->getPermittingOwnerIds(auth()->user());
- $procurements = Procurement::query()
- ->filter($filters)
- ->with(['initiator','supplier','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
- $query->with('customer')->whereIn('id',$owner_ids);
- }])->get();
- $procurementStatus=Procurement::status;
- $row = ['采购编号','采购日期','接单日期','签收日期','项目名称','采购公司','供应商','耗材编号','耗材','尺寸大小','特殊要求',
- '材质规格','采购数量','销售数量','收货数量','采购单价(元)','销售单价(元)','应收金额(元)','应付金额(元)','状态'];
- $list = [];
- foreach ($procurements as $procurement){
- $list[] = [
- $procurement->code,
- $procurement->created_at,
- '',//接单日期
- '',//签收日期
- $procurement->ownerMaterial->owner ? $procurement->ownerMaterial->owner->name :'',
- $procurement->ownerMaterial->owner->customer ? $procurement->ownerMaterial->owner->customer->company_name :'',
- $procurement->supplier ? $procurement->supplier->name :'',
- $procurement->ownerMaterial->material ? $procurement->ownerMaterial->material->code :'',
- $procurement->ownerMaterial->material ? $procurement->ownerMaterial->material->name :'',
- $procurement->ownerMaterial ? $procurement->ownerMaterial->size :'',
- $procurement->ownerMaterial ? $procurement->ownerMaterial->special :'',
- $procurement->ownerMaterial ? $procurement->ownerMaterial->specification :'',
- $procurement->quantity,
- $procurement->amount,
- '',//收货数量
- $procurement->cost_price,
- $procurement->unit_price,
- '',//应收金额
- '',//应付金额
- is_null($procurement->status) ? '' :$procurementStatus[$procurement->status],
- ];
- }
- return app(ExportService::class)->json($row,$list,"采购账单报表记录");
- }
- //月账单报表导出
- public function procurementTotalBillExport(Request $request){
- $this->gate('采购管理-财务-月账单报表');
- /** @var ProcurementTotalBillService $procurementTotalBillService*/
- $procurementTotalBillService=app(ProcurementTotalBillService::class);
- if ($request->input('checkAllSign')){
- $params = $request->input();
- unset($params["checkAllSign"]);
- $procurementTotalBills=$procurementTotalBillService->get($params);
- }else{
- $procurementTotalBills=$procurementTotalBillService->get(["id"=>$request->data]);
- }
- $procurementTotalBillStatus=ProcurementTotalBill::status;
- $row = ['对账编号','账单日期','提交日期','供应商','总金额','状态'];
- $list = [];
- foreach ($procurementTotalBills as $procurementTotalBill){
- $list[] = [
- $procurementTotalBill->id,
- $procurementTotalBill->counting_month,
- $procurementTotalBill->created_at,
- $procurementTotalBill->supplier ? $procurementTotalBill->supplier :'',
- $procurementTotalBill->total_payable,
- $procurementTotalBill->status ? $procurementTotalBillStatus[$procurementTotalBill->status] :'',
- ];
- }
- return app(ExportService::class)->json($row,$list,"采购管理-月账单报表记录");
- }
- }
|