Sfoglia il codice sorgente

提交采购管理相应改动,添加供应商-可见全部权限

hu hao 5 anni fa
parent
commit
1c5608f013

+ 44 - 3
app/Http/Controllers/ProcurementController.php

@@ -14,6 +14,7 @@ use App\Jobs\ProcurementEnquiry;
 use App\Jobs\ProcurementReceive;
 use App\Jobs\ProcurementWaitConfirmInform;
 use App\Material;
+use App\Owner;
 use App\Procurement;
 use App\ProcurementCheckSheet;
 use App\ProcurementDeliverie;
@@ -23,6 +24,7 @@ use App\Services\ConfigurationService;
 use App\Services\OwnerMaterialService;
 use App\Services\ProcurementService;
 use App\Services\ProcurementTotalBillService;
+use App\Services\SupplierService;
 use App\Supplier;
 use Illuminate\Http\Request;
 use Illuminate\Support\Carbon;
@@ -70,9 +72,13 @@ class ProcurementController extends Controller
             ->with(['initiator','ownerMaterial.file','ownerMaterial.material','supplier','ownerMaterial.owner'=>function($query)use($owner_ids){
                 $query->with('customer')->whereIn('id',$owner_ids);
             },'procurementDeliveries'])
+            ->whereHas('ownerMaterial',function($builder)use($owner_ids){
+                $builder->whereHas('owner',function ($build)use($owner_ids){
+                    $build->whereIn('id',$owner_ids);
+                });
+            })
             ->paginate($param['paginate'] ?? 50);
         foreach ($procurements as $procurement){
-//            dd($procurement);
             if (empty($procurement->procurementDeliveries))continue;
             if (Carbon::now()->gt($procurement['deadline'])){
                 $procurement->isFinishEnquiry=true;
@@ -265,10 +271,20 @@ class ProcurementController extends Controller
     {
         if(!Gate::allows('采购管理-财务-对账单')){ return ["success"=>false,"data"=>"您无此权限操作!"];  }
         $paginateParams=$request->input();
+        /**@var SupplierService $supplierService*/
+        $supplierService=app(SupplierService::class);
+        $supplier_ids=$supplierService->screenSupplierIds();
         $procurementCheckSheets=ProcurementCheckSheet::query()
             ->orderByDesc('id')
             ->filter($filters)
             ->with(['procurementDelivery.procurement.supplier','procurementDelivery.procurement.ownerMaterial.material','procurementDelivery.receiver'])
+            ->whereHas('procurementDelivery',function($builder)use($supplier_ids){
+                $builder->whereHas('procurement',function ($build)use($supplier_ids){
+                    $build->whereHas('supplier',function ($build)use($supplier_ids){
+                        $build->whereIn('id',$supplier_ids);
+                    });
+                });
+            })
             ->paginate($param['paginate'] ?? 50);
         $suppliers=Supplier::query()->select('id','name')->get();
         $materials=Material::query()->select('id','name')->get();
@@ -279,7 +295,6 @@ class ProcurementController extends Controller
         $this->gate('采购管理-财务-对账单');
         $id=$request->input('procurementCheckSheetId');
         $invoice_number=$request->input('invoice_number');
-
         $procurementCheckSheet=ProcurementCheckSheet::query()->where('id',$id)->update(['invoice_number'=>$invoice_number]);
         if ($procurementCheckSheet) return ['success' => true,'data' => $invoice_number];
         else return ['success' => false, 'message' => '添加失败'];
@@ -301,6 +316,11 @@ class ProcurementController extends Controller
                 /** @var Builder $query */
                 $query->with('customer')->whereIn('id',$owner_ids);
             },'procurementDeliveries'])
+            ->whereHas('ownerMaterial',function($builder)use($owner_ids){
+                $builder->whereHas('owner',function ($build)use($owner_ids){
+                   $build->whereIn('id',$owner_ids);
+                });
+            })
             ->where('type',0) //只取采购单
             ->paginate($param['paginate'] ?? 50);
         foreach ($procurements as $procurement){
@@ -329,7 +349,13 @@ class ProcurementController extends Controller
             ->filter($filters)
             ->with(['initiator','ownerMaterial.material','ownerMaterial.owner'=>function($query)use($owner_ids){
                 $query->with('customer')->whereIn('id',$owner_ids);
-            },'procurementDeliveries'])->get();
+            },'procurementDeliveries'])
+            ->whereHas('ownerMaterial',function($builder)use($owner_ids){
+                $builder->whereHas('owner',function ($build)use($owner_ids){
+                    $build->whereIn('id',$owner_ids);
+                });
+            })
+            ->get();
         foreach ($procurements as $procurement){
             if (empty($procurement->procurementDeliveries))continue;
             $procurement->deliver_amount=$procurement->procurementDeliveries->sum('amount');
@@ -362,9 +388,19 @@ class ProcurementController extends Controller
     //对账单报表导出
     public function checkBillExport(Request $request,ProcurementCheckSheetFilters $filters){
         $this->gate('采购管理-财务-对账单');
+        /**@var SupplierService $supplierService*/
+        $supplierService=app(SupplierService::class);
+        $supplier_ids=$supplierService->screenSupplierIds();
         $procurementCheckSheets=ProcurementCheckSheet::query()
             ->filter($filters)
             ->with(['procurementDelivery.procurement.supplier','procurementDelivery.procurement.ownerMaterial.material','procurementDelivery.receiver'])
+            ->whereHas('procurementDelivery',function($builder)use($supplier_ids){
+                $builder->whereHas('procurement',function ($build)use($supplier_ids){
+                    $build->whereHas('supplier',function ($build)use($supplier_ids){
+                        $build->whereIn('id',$supplier_ids);
+                    });
+                });
+            })
             ->get();
         $procurementCheckSheetStatus=ProcurementCheckSheet::status;
         $row = ['采购编号','采购日期','送货日期','供应商名称','耗材编号','耗材','采购数量','送货数量','签收人','签收日期','应付金额','发票号','状态'];
@@ -398,6 +434,11 @@ class ProcurementController extends Controller
                 /** @var Builder $query */
                 $query->with('customer')->whereIn('id',$owner_ids);
             },'procurementDeliveries'])
+            ->whereHas('ownerMaterial',function($builder)use($owner_ids){
+                $builder->whereHas('owner',function ($build)use($owner_ids){
+                    $build->whereIn('id',$owner_ids);
+                });
+            })
             ->where('type',0) //只取采购单
             ->get();
         foreach ($procurements as $procurement){

+ 1 - 27
app/Http/Controllers/TestController.php

@@ -105,6 +105,7 @@ use App\Services\OrderTrackingOwnerService;
 use App\Services\OrderTrackingService;
 use App\Services\OwnerPriceOperationService;
 use App\Services\OwnerService;
+use App\Services\ProcurementService;
 use App\Services\RegionService;
 use App\Services\RejectedBillService;
 use App\Services\ShopService;
@@ -1241,31 +1242,4 @@ where purch.islower=1 and deliver.id>'.$id);
         }
         ProcurementCheckSheet::query()->insert($insert_);
     }
-    public function test111()
-    {
-        $status=0;
-        /*$procurements=Procurement::query()
-            ->withCount('procurementQuotations')
-            ->with('ownerMaterial.material')
-            ->where('status',$status)
-            ->get();*/
-//        $a = DB::select(DB::raw(<<<sql
-//select `procurements`.*, (select count(*) from `procurement_quotations` where `procurements`.`id` = `procurement_quotations`.`procurement_id` and `supplier_id` in ('83')) as `procurement_quotations_count` from `procurements` where `status` = '0'
-//sql
-//));
-//        dd($a);
-        dd($procurements=Procurement::query()
-            ->withCount('procurementQuotations')
-            ->with('ownerMaterial.material')
-            ->where('status',$status)->get());
-        $keys = [];
-        foreach ($procurements as $key=>$procurement){
-            if ($procurement->procurement_quotations_count>0 && $status==0 )$keys[]= $key;
-            if ($procurement->type==2 && $procurement->supplier_id )$keys[]= $key;
-            if (Carbon::parse($procurement->deadline)->gt(Carbon::now())) $procurement->deadline=Carbon::parse($procurement->deadline)->diffInMilliseconds();
-            else $procurement->deadline=0;
-        }
-        $procurements = $procurements->diffKeys($keys);
-        dd($procurements);
-    }
 }

+ 1 - 6
app/Http/Controllers/api/thirdPart/weixin/ProcurementController.php

@@ -69,12 +69,11 @@ class ProcurementController extends Controller
         DB::transaction(function ()use($procurement,$param,$supplier){
             if (!$procurement->supplier_id)$procurement->update([
                 "supplier_id" => $supplier->id,
-                "status" =>1,
+//                "status" =>1,
                 "cost_price" =>$param['offer'],
             ]);
             DB::commit();
         });
-//        $procurement->update(['status'=>1]);//1:已报价
         if ($procurementQuotation) return $this->success($procurementQuotation);
     }
     //接单
@@ -137,14 +136,10 @@ class ProcurementController extends Controller
             }
         }
         if ((int)$deliveryAmount>(int)$procurement->quantity) return  response()->json(['status'=>0,'message' => '当前送货数量叠加已送货数量大于采购数量','data'=>$deliveryAmount], 401);
-//        /** @var $apiUserService UserService */
-//        $apiUserService=app(UserService::class);
-//        $user= $apiUserService->getUser($request->header('token'));
         //生成送货单
         $procurementDelivery=new ProcurementDeliverie();
         $procurementDelivery['procurement_id']=$param['id'];
         $procurementDelivery['amount']=$param['deliverAmount'];
-//        $procurementDelivery['initiator']=$user->data->id;
         $procurementDelivery['initiator']=Auth::user()['id'];
         $procurementDelivery['signer']=$procurement->initiator ?? 0;
         $procurementDelivery['created_at']=Carbon::now()->toDateTimeString();

+ 16 - 3
app/Procurement.php

@@ -5,6 +5,7 @@ namespace App;
 use App\Services\api\UserService;
 use App\Traits\ModelTimeFormat;
 use Carbon\Carbon;
+use Illuminate\Support\Facades\Gate;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 
@@ -69,17 +70,29 @@ class Procurement extends Model
     {
         return $filters->apply($query);
     }
+
     protected static function booted()
     {
         /** @var User $user */
         $user = Auth::user();
-        if ($user && !$user->isSuperAdmin()) {
+        if (Gate::allows('供应商-可见全部'))return;
+        if ($user && !$user->isSuperAdmin()){
             /** @var \stdClass $user */
             $ids = array_column(DB::select(DB::raw("SELECT supplier_id FROM supplier_user WHERE user_id = ?"),[$user->id]),"supplier_id");
             if (count($ids)>0){
                 static::addGlobalScope('supplier', function (Builder $builder)use ($ids) {
-                    $builder->whereIn('supplier_id',$ids);
-                });
+                    $builder->where(function (Builder $query)use($ids){
+                        $query->where(function (Builder $query)use($ids){
+                            $query->whereNull("supplier_id")->orWhereIn('supplier_id',$ids)->orWhere("type",1);
+                        })->whereHas("ownerMaterial",function (Builder $query)use($ids){
+                            $query->whereHas("material",function (Builder $query)use($ids){
+                                $query->whereHas("supplier",function (Builder $query)use($ids){
+                                    $query->whereIn('id',$ids);
+                                });
+                            });
+                        });
+                    });
+                });//采购单 供应商为空 -》 耗材的供应商存在于IDS   供应商存在 -》 供应商本身存在于IDS
             }
         }
     }

+ 6 - 4
app/Providers/AppServiceProvider.php

@@ -105,6 +105,7 @@ use Illuminate\Support\Facades\View;
 use Illuminate\Support\ServiceProvider;
 use Ramsey\Uuid\Uuid;
 use Illuminate\Support\Facades\Validator;
+use App\Services\SupplierService;
 
 class AppServiceProvider extends ServiceProvider
 {
@@ -156,12 +157,12 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('CheckActiveMenuService',CheckActiveMenuService::class);
         app()->singleton('CommodityBarcodeService',CommodityBarcodeService::class);
         app()->singleton('CommodityService', CommodityService::class);
+        app()->singleton('ConfigurationService',ConfigurationService::class);
         app()->singleton('CustomerLogService',CustomerLogService::class);
         app()->singleton('CustomerLogService',CustomerLogService::class);
         app()->singleton('CustomerLogStatusService',CustomerLogStatusService::class);
         app()->singleton('CustomerLogStatusService',CustomerLogStatusService::class);
         app()->singleton('CustomerService',CustomerService::class);
-        app()->singleton('ConfigurationService',ConfigurationService::class);
         app()->singleton('DataHandlerService',DataHandlerService::class);
         app()->singleton('DeliveryAppointmentService',DeliveryAppointmentService::class);
         app()->singleton('DepositoryService',DepositoryService::class);
@@ -199,6 +200,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('OwnerBillReportService',OwnerBillReportService::class);
         app()->singleton('OwnerFeeDetailService',OwnerFeeDetailService::class);
         app()->singleton('OwnerMaterialService',OwnerMaterialService::class);
+        app()->singleton('OwnerMaterialService',OwnerMaterialService::class);
         app()->singleton('OwnerPriceDirectLogisticService',OwnerPriceDirectLogisticService::class);
         app()->singleton('OwnerPriceExpressService',OwnerPriceExpressService::class);
         app()->singleton('OwnerPriceLogisticService',OwnerPriceLogisticService::class);
@@ -207,17 +209,16 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('OwnerReportService',OwnerReportService::class);
         app()->singleton('OwnerService',OwnerService::class);
         app()->singleton('OwnerStoragePriceModelService',OwnerStoragePriceModelService::class);
-        app()->singleton('OwnerMaterialService',OwnerMaterialService::class);
         app()->singleton('PackageService',PackageService::class);
         app()->singleton('PackageStatisticsService',PackageStatisticsService::class);
         app()->singleton('ProcessMethodService',ProcessMethodService::class);
         app()->singleton('ProcessService',ProcessService::class);
         app()->singleton('ProcessStatisticService',ProcessStatisticService::class);
         app()->singleton('ProcessesContentService',ProcessesContentService::class);
-        app()->singleton('ProvinceService',ProvinceService::class);
         app()->singleton('ProcurementService',ProcurementService::class);
         app()->singleton('ProcurementTotalBillService',ProcurementTotalBillService::class);
         app()->singleton('ProcurementWeiXinSendMessageService',ProcurementWeiXinSendMessageService::class);
+        app()->singleton('ProvinceService',ProvinceService::class);
         app()->singleton('RealtimePendingOrdersService',RealtimePendingOrdersService::class);
         app()->singleton('RegionService',RegionService::class);
         app()->singleton('RejectedBillItemService',RejectedBillItemService::class);
@@ -239,14 +240,15 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('StoreCheckingReceiveService',StoreCheckingReceiveService::class);
         app()->singleton('StoreItemService',StoreItemService::class);
         app()->singleton('StoreService',StoreService::class);
+        app()->singleton('SupplierService',SupplierService::class);
         app()->singleton('UnitService',UnitService::class);
         app()->singleton('UserOwnerGroupService',UserOwnerGroupService::class);
         app()->singleton('UserService',UserService::class);
-//        app()->singleton('ApiUserService',\App\Services\api\UserService::class);
         app()->singleton('UserWorkgroupService',UserWorkgroupService::class);
         app()->singleton('WarehouseService',WarehouseService::class);
         app()->singleton('WaybillFinancialService',WaybillFinancialService::class);
         app()->singleton('WeighExceptedService',WeighExceptedService::class);
+//        app()->singleton('ApiUserService',\App\Services\api\UserService::class);
     }
 
 

+ 30 - 0
app/Services/SupplierService.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Services;
+
+use App\Traits\ServiceAppAop;
+use App\Supplier;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Facades\Auth;
+
+class SupplierService
+{
+    use ServiceAppAop;
+    protected $modelClass=Supplier::class;
+
+    public function screenSupplierIds(): array
+    {
+        $user=Auth::user();
+        if ($user && $user->isSuperAdmin()) return Supplier::query()->get()->map(function ($supplier){return $supplier->id;})->toArray();
+        $suppliers=Supplier::query()
+            ->whereHas('user',function($query)use($user){
+                /** @var Builder $query */
+                return $query->where('id',$user->id);
+            })->get();
+
+        if (isset($suppliers)) return $suppliers->map(function ($supplier){
+            return $supplier->id;
+        })->toArray();
+    }
+
+}

+ 36 - 0
database/migrations/2021_04_16_142212_add_authority_supplier.php

@@ -0,0 +1,36 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddAuthoritySupplier extends Migration
+{
+    protected $authNames=[
+        '供应商-可见全部',
+    ];
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        foreach ($this->authNames as $name){
+            if(!Authority::where('name',$name)->first())(new Authority(['name'=>$name,'alias_name'=>$name]))->save();
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        foreach ($this->authNames as $name){
+            Authority::where('name',$name)->delete();
+        }
+    }
+}