diff --git a/app/Admin/Controllers/Finance/LedgerController.php b/app/Admin/Controllers/Finance/LedgerController.php index f4af6f3..497c559 100644 --- a/app/Admin/Controllers/Finance/LedgerController.php +++ b/app/Admin/Controllers/Finance/LedgerController.php @@ -50,44 +50,6 @@ class LedgerController extends AdminController return $this->response()->success($page); } - /** - * 审核 - */ - public function approval($id, Request $request) - { - $validator = Validator::make( - data: $request->all(), - rules: [ - 'approval_result' => ['bail', 'required', Rule::in([1, 2])], - 'failed_reason' => ['bail', 'required_if:approval_result,2'], - ], - attributes: [ - 'approval_result' => __('finance.ledger.approval_result'), - 'failed_reason' => __('finance.ledger.failed_reason'), - ], - ); - - if ($validator->fails()) { - return $this->response()->fail($validator->errors()->first()); - } - - $ledger = Ledger::findOrFail($id); - - if ($ledger->ledger_status !== LedgerStatus::Processing) { - return $this->response()->fail('上报数据不是待审核状态'); - } - - if ($request->input('approval_result') == 1) { - $ledger->ledger_status = LedgerStatus::Passed; - } else { - $ledger->ledger_status = LedgerStatus::Rejected; - } - - $ledger->save(); - - return $this->response()->success(null, '审核成功'); - } - public function updateLedgerAmount($id, Request $request) { $validator = Validator::make( @@ -129,10 +91,6 @@ class LedgerController extends AdminController ->valueField('id') ->clearable() ->columnRatio(3), - amis()->SelectControl('status', __('finance.ledger.ledger_status')) - ->multiple() - ->options(LedgerStatus::options()) - ->columnRatio(3), amis()->DateRangeControl('date_range', __('finance.ledger.date')) ->valueFormat('YYYY-MM-DD'), ]), @@ -151,20 +109,13 @@ class LedgerController extends AdminController amis()->TableColumn()->name('actual_commission')->label(__('finance.ledger.actual_commission')), amis()->TableColumn()->name('expected_income')->label(__('finance.ledger.expected_income')), amis()->TableColumn()->name('actual_income')->label(__('finance.ledger.actual_income')), - amis()->TableColumn() - ->name('ledger_status') - ->label(__('finance.ledger.ledger_status')) - ->type('mapping') - ->map(LedgerStatus::labelMap()), amis()->TableColumn()->name('created_at')->label(__('finance.ledger.created_at')), $this->rowActions([ - $this->rowApprovalButton() - ->visibleOn('${ledger_status == 2}'), $this->rowEditLedgerAmountButton() ->visible(Admin::user()->can('admin.finance.ledgers.update_ledger_amount')), - $this->rowEditButton(true) - ->visible(Admin::user()->can('admin.finance.ledgers.update')) - ->visibleOn('${ledger_status == 1 || ledger_status == 4}'), + // $this->rowEditButton(true) + // ->visible(Admin::user()->can('admin.finance.ledgers.update')) + // ->visibleOn('${ledger_status == 1 || ledger_status == 4}'), $this->rowShowButton() ->visible(Admin::user()->can('admin.finance.ledgers.view')), ]), @@ -214,33 +165,11 @@ class LedgerController extends AdminController 'span' => 3 ], ['label' => __('finance.ledger.photos'), 'content' => amis()->Images()->enlargeAble()->source('${photos}')->enlargeWithGallary(), 'span' => 3], - ['label' => __('finance.ledger.ledger_status'), 'content' => amis()->Mapping()->map(LedgerStatus::labelMap())->value('${ledger_status}'), 'span' => 3], + // ['label' => __('finance.ledger.ledger_status'), 'content' => amis()->Mapping()->map(LedgerStatus::labelMap())->value('${ledger_status}'), 'span' => 3], ]), ]); } - protected function rowApprovalButton() - { - return amis()->DialogAction()->icon('fa-regular fa-check-circle')->label(__('finance.ledger.approval'))->level('link')->dialog( - amis()->Dialog()->title(__('finance.ledger.approval'))->body([ - amis()->Form()->title('') - ->api('post:'.admin_url('finance/ledgers/${id}/approval')) - ->body([ - amis()->RadiosControl('approval_result', __('finance.ledger.approval_result')) - ->options([ - ['label' => '通过', 'value' => 1], - ['label' => '驳回', 'value' => 2], - ]) - ->selectFirst() - ->required(), - amis()->TextareaControl('failed_reason', __('finance.ledger.failed_reason')) - ->visibleOn('${approval_result == 2}') - ->required(), - ]), - ])->size('md') - ); - } - protected function rowEditLedgerAmountButton() { return amis()->DialogAction() diff --git a/app/Admin/Controllers/Finance/ReimbursementController.php b/app/Admin/Controllers/Finance/ReimbursementController.php index 1d6c7f8..3cb5280 100644 --- a/app/Admin/Controllers/Finance/ReimbursementController.php +++ b/app/Admin/Controllers/Finance/ReimbursementController.php @@ -6,6 +6,7 @@ use App\Admin\Controllers\AdminController; use App\Admin\Services\Finance\ReimbursementService; use App\Enums\ReimbursementStatus; use App\Models\Reimbursement; +use App\Traits\HasCheckActions; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; @@ -19,45 +20,10 @@ use Slowlyo\OwlAdmin\Renderers\Page; */ class ReimbursementController extends AdminController { + use HasCheckActions; + protected string $serviceName = ReimbursementService::class; - /** - * 审核 - */ - public function approval($id, Request $request) - { - $validator = Validator::make( - data: $request->all(), - rules: [ - 'approval_result' => ['bail', 'required', Rule::in([1, 2])], - 'failed_reason' => ['bail', 'required_if:approval_result,2'], - ], - attributes: [ - 'approval_result' => __('finance.reimbursement.approval_result'), - 'failed_reason' => __('finance.reimbursement.failed_reason'), - ], - ); - - if ($validator->fails()) { - return $this->response()->fail($validator->errors()->first()); - } - - /** @var \App\Models\Reimbursement */ - $reimbursement = Reimbursement::findOrFail($id); - - if (! $reimbursement->isPending()) { - return $this->response()->fail('收支报销不是待审核状态'); - } - - $reimbursement->update([ - 'reimbursement_status' => $request->input('approval_result') == 1 - ? ReimbursementStatus::Passed - : ReimbursementStatus::Rejected, - ]); - - return $this->response()->success(null, '审核成功'); - } - public function list(): Page { $crud = $this->baseCRUD() @@ -74,9 +40,9 @@ class ReimbursementController extends AdminController ->source(admin_url('api/keywords/tree-list?parent_key=reimbursement_type')) ->labelField('name') ->valueField('key'), - amis()->SelectControl('status', __('finance.reimbursement.status')) - ->multiple() - ->options(ReimbursementStatus::options()), + // amis()->SelectControl('status', __('finance.reimbursement.status')) + // ->multiple() + // ->options(ReimbursementStatus::options()), ]), amis()->GroupControl()->mode('horizontal')->body([ amis()->InputDatetimeRange() @@ -92,16 +58,14 @@ class ReimbursementController extends AdminController amis()->TableColumn()->name('expense')->label(__('finance.reimbursement.expense')), amis()->TableColumn()->name('reason')->label(__('finance.reimbursement.reason')), amis()->TableColumn()->name('type.name')->label(__('finance.reimbursement.type')), - amis()->TableColumn() - ->name('reimbursement_status') - ->label(__('finance.reimbursement.status')) - ->type('mapping') - ->map(ReimbursementStatus::labelMap()), + // amis()->TableColumn() + // ->name('reimbursement_status') + // ->label(__('finance.reimbursement.status')) + // ->type('mapping') + // ->map(ReimbursementStatus::labelMap()), amis()->TableColumn()->name('created_at')->label(__('finance.reimbursement.created_at')), $this->rowActions([ - $this->rowApprovalButton() - ->visibleOn('${reimbursement_status == '.ReimbursementStatus::Pending->value.'}'), - $this->rowShowButton()->visible(Admin::user()->can('admin.finance.reimbursements.view')), + $this->rowShowButton()->visible(Admin::user()->can('admin.finance.reimbursements.view')), ]), ]); @@ -116,35 +80,10 @@ class ReimbursementController extends AdminController ['label' => __('finance.reimbursement.expense'), 'content' => '${expense}'], ['label' => __('finance.reimbursement.reason'), 'content' => '${reason}'], ['label' => __('finance.reimbursement.type'), 'content' => '${type.name}'], - ['label' => __('finance.reimbursement.status'), 'content' => amis()->Mapping()->map(ReimbursementStatus::labelMap())->value('${reimbursement_status}')], + // ['label' => __('finance.reimbursement.status'), 'content' => amis()->Mapping()->map(ReimbursementStatus::labelMap())->value('${reimbursement_status}')], ['label' => __('finance.reimbursement.created_at'), 'content' => '${created_at}'], ['label' => __('finance.reimbursement.photos'), 'content' => amis()->Images()->enlargeAble()->source('${photos}')->enlargeWithGallary(), 'span' => 3], ]), ]); } - - /** - * 审核操作按钮 - */ - protected function rowApprovalButton(): DialogAction - { - return amis()->DialogAction()->icon('fa-regular fa-check-circle')->label(__('finance.reimbursement.approval'))->level('link')->dialog( - amis()->Dialog()->title(__('finance.reimbursement.approval'))->body([ - amis()->Form()->title('') - ->api('post:'.admin_url('finance/reimbursements/${id}/approval')) - ->body([ - amis()->RadiosControl('approval_result', __('finance.reimbursement.approval_result')) - ->options([ - ['label' => '通过', 'value' => 1], - ['label' => '驳回', 'value' => 2], - ]) - ->selectFirst() - ->required(), - amis()->TextareaControl('failed_reason', __('finance.reimbursement.failed_reason')) - ->visibleOn('${approval_result == 2}') - ->required(), - ]), - ])->size('md') - ); - } } diff --git a/app/Admin/Controllers/Finance/StoreMasterCommissionController.php b/app/Admin/Controllers/Finance/StoreMasterCommissionController.php index 57a1f19..00052a0 100644 --- a/app/Admin/Controllers/Finance/StoreMasterCommissionController.php +++ b/app/Admin/Controllers/Finance/StoreMasterCommissionController.php @@ -20,44 +20,6 @@ class StoreMasterCommissionController extends AdminController { protected string $serviceName = StoreMasterCommissionService::class; - /** - * 审核 - */ - public function approval($id, Request $request) - { - $validator = Validator::make( - data: $request->all(), - rules: [ - 'approval_result' => ['bail', 'required', Rule::in([1, 2])], - 'failed_reason' => ['bail', 'required_if:approval_result,2'], - ], - attributes: [ - 'approval_result' => __('finance.store_master_commission.approval_result'), - 'failed_reason' => __('finance.store_master_commission.failed_reason'), - ], - ); - - if ($validator->fails()) { - return $this->response()->fail($validator->errors()->first()); - } - - $masterCommission = StoreMasterCommission::findOrFail($id); - - if ($masterCommission->approval_status !== StoreMasterCommissionApprovalStatus::Pending) { - return $this->response()->fail('店长提成不是待审核状态'); - } - - if ($request->input('approval_result') == 1) { - $masterCommission->approval_status = StoreMasterCommissionApprovalStatus::Passed; - } else { - $masterCommission->approval_status = StoreMasterCommissionApprovalStatus::Rejected; - } - - $masterCommission->save(); - - return $this->response()->success(null, '操作成功'); - } - public function list(): Page { $crud = $this->baseCRUD() @@ -80,10 +42,6 @@ class StoreMasterCommissionController extends AdminController ->valueField('id') ->clearable() ->columnRatio(3), - amis()->SelectControl('status', __('finance.store_master_commission.approval_status')) - ->multiple() - ->options(StoreMasterCommissionApprovalStatus::options()) - ->columnRatio(3), ]), ])) ->columns([ @@ -95,19 +53,12 @@ class StoreMasterCommissionController extends AdminController amis()->TableColumn()->name('daily_expenses')->label(__('finance.store_master_commission.daily_expenses')), amis()->TableColumn()->name('employee_expenses')->label(__('finance.store_master_commission.employee_expenses')), amis()->TableColumn()->name('other_expenses')->label(__('finance.store_master_commission.other_expenses')), - amis()->TableColumn() - ->name('approval_status') - ->label(__('finance.store_master_commission.approval_status')) - ->type('mapping') - ->map(StoreMasterCommissionApprovalStatus::labelMap()), amis()->TableColumn()->name('created_at')->label(__('finance.store_master_commission.created_at')), $this->rowActions([ - $this->rowApprovalButton() - ->visibleOn('${approval_status == '.StoreMasterCommissionApprovalStatus::Pending->value.'}'), $this->rowEditTypeButton('drawer', 'lg') - ->visible(Admin::user()->can('admin.finance.store_master_commissions.update')) - ->visibleOn('${approval_status == '.StoreMasterCommissionApprovalStatus::Rejected->value.'}'), - $this->rowDeleteButton()->visible(Admin::user()->can('admin.finance.store_master_commissions.delete')), + ->visible(Admin::user()->can('admin.finance.store_master_commissions.update')), + $this->rowDeleteButton() + ->visible(Admin::user()->can('admin.finance.store_master_commissions.delete')), ]), ]); @@ -159,26 +110,4 @@ class StoreMasterCommissionController extends AdminController ->required(), ]); } - - protected function rowApprovalButton() - { - return amis()->DialogAction()->icon('fa-regular fa-check-circle')->label(__('finance.store_master_commission.approval'))->level('link')->dialog( - amis()->Dialog()->title(__('finance.store_master_commission.approval'))->body([ - amis()->Form()->title('') - ->api('post:'.admin_url('finance/store-master-commissions/${id}/approval')) - ->body([ - amis()->RadiosControl('approval_result', __('finance.store_master_commission.approval_result')) - ->options([ - ['label' => '通过', 'value' => 1], - ['label' => '驳回', 'value' => 2], - ]) - ->selectFirst() - ->required(), - amis()->TextareaControl('failed_reason', __('finance.store_master_commission.failed_reason')) - ->visibleOn('${approval_result == 2}') - ->required(), - ]), - ])->size('md') - ); - } } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 7d845fe..4922955 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -110,7 +110,6 @@ Route::group([ $router->get('commission-incomes', [CommissionIncomeController::class, 'index'])->name('commission_incomes.index'); // 收支报销 $router->resource('reimbursements', ReimbursementController::class); - $router->post('reimbursements/{reimbursement}/approval', [ReimbursementController::class, 'approval'])->name('reimbursements.approval'); // 销售统计 $router->get('sales-statistics', [SalesStatisticController::class, 'index'])->name('sales_statistics.index'); // 门店统计 diff --git a/app/Enums/LedgerStatus.php b/app/Enums/LedgerStatus.php deleted file mode 100644 index bc13e24..0000000 --- a/app/Enums/LedgerStatus.php +++ /dev/null @@ -1,41 +0,0 @@ - '待编辑', - self::Processing => '待审核', - self::Passed => '已完成', - self::Rejected => '未通过', - }; - } - - public static function options(): array - { - return collect(self::cases()) - ->map(fn (LedgerStatus $case) => [ - 'label' => $case->label(), - 'value' => $case->value, - ]) - ->all(); - } - - public static function labelMap(): array - { - return [ - self::Pending->value => '待编辑', - self::Processing->value => '待审核', - self::Passed->value => '已完成', - self::Rejected->value => '未通过', - ]; - } -} diff --git a/app/Enums/ReimbursementStatus.php b/app/Enums/ReimbursementStatus.php deleted file mode 100644 index a5c9ad1..0000000 --- a/app/Enums/ReimbursementStatus.php +++ /dev/null @@ -1,38 +0,0 @@ - '待审核', - self::Passed => '已通过', - self::Rejected => '未通过', - }; - } - - public static function options(): array - { - return collect(self::cases()) - ->map(fn (ReimbursementStatus $case) => [ - 'label' => $case->label(), - 'value' => $case->value, - ]) - ->all(); - } - - public static function labelMap(): array - { - return [ - self::Pending->value => ''.self::Pending->label().'', - self::Passed->value => ''.self::Passed->label().'', - self::Rejected->value => ''.self::Rejected->label().'', - ]; - } -} diff --git a/app/Enums/StoreMasterCommissionApprovalStatus.php b/app/Enums/StoreMasterCommissionApprovalStatus.php deleted file mode 100644 index 4d56047..0000000 --- a/app/Enums/StoreMasterCommissionApprovalStatus.php +++ /dev/null @@ -1,38 +0,0 @@ - '待审核', - self::Passed => '已通过', - self::Rejected => '未通过', - }; - } - - public static function options(): array - { - return collect(self::cases()) - ->map(fn (StoreMasterCommissionApprovalStatus $case) => [ - 'label' => $case->label(), - 'value' => $case->value, - ]) - ->all(); - } - - public static function labelMap(): array - { - return [ - self::Pending->value => ''.self::Pending->label().'', - self::Passed->value => ''.self::Passed->label().'', - self::Rejected->value => ''.self::Rejected->label().'', - ]; - } -} diff --git a/app/Models/Reimbursement.php b/app/Models/Reimbursement.php index 03677e5..af50671 100644 --- a/app/Models/Reimbursement.php +++ b/app/Models/Reimbursement.php @@ -2,7 +2,10 @@ namespace App\Models; +use App\Contracts\Checkable; +use App\Enums\CheckStatus; use App\Enums\ReimbursementStatus; +use App\Traits\HasCheckable; use App\Traits\HasDateTimeFormatter; use EloquentFilter\Filterable; use Illuminate\Database\Eloquent\Casts\Attribute; @@ -10,16 +13,12 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -class Reimbursement extends Model +class Reimbursement extends Model implements Checkable { - use Filterable, HasDateTimeFormatter, HasFactory; - - protected $attributes = [ - 'reimbursement_status' => ReimbursementStatus::Pending, - ]; + use Filterable, HasDateTimeFormatter, HasFactory, HasCheckable; protected $casts = [ - 'reimbursement_status' => ReimbursementStatus::class, + 'check_status' => CheckStatus::class ]; protected $fillable = [ diff --git a/app/Models/StoreMasterCommission.php b/app/Models/StoreMasterCommission.php index b67c36b..ab70873 100644 --- a/app/Models/StoreMasterCommission.php +++ b/app/Models/StoreMasterCommission.php @@ -13,14 +13,6 @@ class StoreMasterCommission extends Model { use Filterable, HasDateTimeFormatter, HasFactory; - protected $attributes = [ - 'approval_status' => StoreMasterCommissionApprovalStatus::Pending, - ]; - - protected $casts = [ - 'approval_status' => StoreMasterCommissionApprovalStatus::class, - ]; - protected $fillable = [ 'month', 'store_id', @@ -29,7 +21,6 @@ class StoreMasterCommission extends Model 'daily_expenses', 'employee_expenses', 'other_expenses', - 'approval_status', ]; public function store() diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index dad06bd..7091657 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -35,6 +35,7 @@ class AppServiceProvider extends ServiceProvider \App\Models\HolidayApply::class, \App\Models\OvertimeApply::class, \App\Models\OfficalBusiness::class, + \App\Models\Reimbursement::class, ])->mapWithKeys(fn ($model) => [(new $model)->getTable() => $model])->all() ); } diff --git a/app/Traits/HasCheckable.php b/app/Traits/HasCheckable.php index 680eb56..f70fd0d 100644 --- a/app/Traits/HasCheckable.php +++ b/app/Traits/HasCheckable.php @@ -20,7 +20,7 @@ trait HasCheckable /** * 审核通过 - * + * * @param array $options {remarks: 不通过原因, time: 审核时间(默认当前时间)} */ public function checkSuccess(array $options = []) @@ -33,7 +33,7 @@ trait HasCheckable /** * 审核未通过 - * + * * @param array $options {remarks: 不通过原因, time: 审核时间(默认当前时间)} */ public function checkFail(array $options = []) diff --git a/database/migrations/2024_03_27_090406_create_ledgers_table.php b/database/migrations/2024_03_27_090406_create_ledgers_table.php index 028a91f..9462bfa 100644 --- a/database/migrations/2024_03_27_090406_create_ledgers_table.php +++ b/database/migrations/2024_03_27_090406_create_ledgers_table.php @@ -25,7 +25,6 @@ return new class extends Migration $table->decimal('expected_income', 10, 2)->comment('预期收益=预计佣金-支出'); $table->decimal('actual_income', 10, 2)->nullable()->comment('实际收益'); $table->text('photos')->nullable()->comment('照片'); - $table->tinyInteger('ledger_status')->default(1)->comment('状态: 1 待编辑, 2 待审核, 3 已通过, 4 未通过'); $table->timestamps(); $table->unique(['store_id', 'date']); diff --git a/database/migrations/2024_03_29_155959_create_store_master_commissions_table.php b/database/migrations/2024_03_29_155959_create_store_master_commissions_table.php index f525b01..9ef1704 100644 --- a/database/migrations/2024_03_29_155959_create_store_master_commissions_table.php +++ b/database/migrations/2024_03_29_155959_create_store_master_commissions_table.php @@ -20,7 +20,6 @@ return new class extends Migration $table->decimal('daily_expenses', 10, 2)->comment('日常支出'); $table->decimal('employee_expenses', 10, 2)->comment('员工支出'); $table->decimal('other_expenses', 10, 2)->comment('其他支出'); - $table->tinyInteger('approval_status')->default(1)->comment('状态: 1 待审核, 2 已通过, 3 已拒绝'); $table->timestamps(); }); } diff --git a/database/migrations/2024_04_01_210323_create_reimbursements_table.php b/database/migrations/2024_04_01_210323_create_reimbursements_table.php index ddb26e5..25e236e 100644 --- a/database/migrations/2024_04_01_210323_create_reimbursements_table.php +++ b/database/migrations/2024_04_01_210323_create_reimbursements_table.php @@ -18,7 +18,6 @@ return new class extends Migration $table->decimal('expense', 10, 2)->comment('报销费用'); $table->string('reason')->nullable()->comment('报销原因'); $table->text('photos')->nullable()->comment('照片'); - $table->tinyInteger('reimbursement_status')->default(1)->comment('状态: 1 待审核, 2 已通过, 3 已拒绝'); $table->timestamps(); $table->index('reimbursement_type_id'); diff --git a/database/seeders/WorkflowSeeder.php b/database/seeders/WorkflowSeeder.php index e6d0e79..9ed335c 100644 --- a/database/seeders/WorkflowSeeder.php +++ b/database/seeders/WorkflowSeeder.php @@ -22,6 +22,7 @@ class WorkflowSeeder extends Seeder ['key' => 'holiday_apply', 'name' => '请假申请', 'config' => $config, 'created_at' => now(), 'updated_at' => now()], ['key' => 'overtime_apply', 'name' => '加班申请', 'config' => $config, 'created_at' => now(), 'updated_at' => now()], ['key' => 'offical_business', 'name' => '出差报备', 'config' => $config, 'created_at' => now(), 'updated_at' => now()], + ['key' => 'reimbursement', 'name' => '收支报销', 'config' => $config, 'created_at' => now(), 'updated_at' => now()], ]); } }