main
Jing Li 2024-04-03 11:36:50 +08:00
parent 5935145ce0
commit dcdaa909c7
10 changed files with 87 additions and 128 deletions

View File

@ -4,10 +4,7 @@ namespace App\Admin\Controllers\Finance;
use App\Admin\Controllers\AdminController;
use App\Admin\Filters\LedgerFilter;
use App\Admin\Filters\LedgerItemFilter;
use App\Models\Keyword;
use App\Models\Ledger;
use App\Models\LedgerItem;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

View File

@ -4,12 +4,11 @@ namespace App\Admin\Controllers\Finance;
use App\Admin\Controllers\AdminController;
use App\Admin\Services\Finance\LedgerService;
use App\Enums\LedgerStatus;
use App\Models\Ledger;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Slowlyo\OwlAdmin\Admin;
use Slowlyo\OwlAdmin\Renderers\DrawerAction;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Page;
@ -50,6 +49,9 @@ class LedgerController extends AdminController
return $this->response()->success($page);
}
/**
* 修改总账金额
*/
public function updateLedgerAmount($id, Request $request)
{
$validator = Validator::make(
@ -62,15 +64,13 @@ class LedgerController extends AdminController
],
);
if ($validator->fails()) {
return $this->response()->fail($validator->errors()->first());
}
admin_abort_if($validator->fails(), $validator->errors()->first());
/** @var Ledger */
$ledger = Ledger::findOrFail($id);
$ledger->update([
$ledger->forceFill([
'ledger_amount' => $request->input('ledger_amount'),
]);
])->save();
return $this->response()->success(null, '修改成功');
}
@ -90,9 +90,10 @@ class LedgerController extends AdminController
->labelField('title')
->valueField('id')
->clearable()
->columnRatio(3),
->columnRatio(4),
amis()->DateRangeControl('date_range', __('finance.ledger.date'))
->valueFormat('YYYY-MM-DD'),
->valueFormat('YYYY-MM-DD')
->columnRatio(4),
]),
]))
->columns([
@ -113,9 +114,6 @@ class LedgerController extends AdminController
$this->rowActions([
$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->rowShowButton()
->visible(Admin::user()->can('admin.finance.ledgers.view')),
]),
@ -165,19 +163,18 @@ 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],
]),
]);
}
protected function rowEditLedgerAmountButton()
protected function rowEditLedgerAmountButton(): DrawerAction
{
return amis()->DialogAction()
return amis()->DrawerAction()
->icon('fa-regular fa-pen-to-square')
->label(__('finance.ledger.ledger_amount'))
->level('link')
->dialog(
amis()->Dialog()->title(__('finance.ledger.ledger_amount'))->body([
->drawer(
amis()->Drawer()->title(__('finance.ledger.ledger_amount'))->body([
amis()->Form()->title('')
->api('post:'.admin_url('finance/ledgers/${id}/ledger-amount'))
->body([
@ -188,7 +185,7 @@ class LedgerController extends AdminController
->showSteps(false)
->required(),
]),
])
])->size('lg')
);
}
}

View File

@ -4,14 +4,7 @@ namespace App\Admin\Controllers\Finance;
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;
use Slowlyo\OwlAdmin\Admin;
use Slowlyo\OwlAdmin\Renderers\DialogAction;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Page;
@ -20,8 +13,6 @@ use Slowlyo\OwlAdmin\Renderers\Page;
*/
class ReimbursementController extends AdminController
{
use HasCheckActions;
protected string $serviceName = ReimbursementService::class;
public function list(): Page
@ -40,16 +31,10 @@ 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()->GroupControl()->mode('horizontal')->body([
amis()->InputDatetimeRange()
->name('datetime_range')
->name('created_at')
->label(__('finance.reimbursement.created_at'))
->format('YYYY-MM-DD HH:mm:ss')
->columnRatio(4),
->format('YYYY-MM-DD HH:mm:ss'),
]),
]))
->columns([
@ -58,11 +43,6 @@ 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('created_at')->label(__('finance.reimbursement.created_at')),
$this->rowActions([
$this->rowShowButton()->visible(Admin::user()->can('admin.finance.reimbursements.view')),
@ -80,7 +60,6 @@ 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.created_at'), 'content' => '${created_at}'],
['label' => __('finance.reimbursement.photos'), 'content' => amis()->Images()->enlargeAble()->source('${photos}')->enlargeWithGallary(), 'span' => 3],
]),

View File

@ -4,11 +4,6 @@ namespace App\Admin\Controllers\Finance;
use App\Admin\Controllers\AdminController;
use App\Admin\Services\Finance\StoreMasterCommissionService;
use App\Enums\StoreMasterCommissionApprovalStatus;
use App\Models\StoreMasterCommission;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Slowlyo\OwlAdmin\Admin;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Renderers\Page;

View File

@ -3,7 +3,6 @@
namespace App\Admin\Controllers\Finance;
use App\Admin\Controllers\AdminController;
use App\Admin\Filters\LedgerFilter;
use App\Admin\Filters\LedgerItemFilter;
use App\Admin\Filters\StoreFilter;
use App\Models\Ledger;

View File

@ -17,11 +17,6 @@ class LedgerFilter extends ModelFilter
$this->whereBetween('date', explode(',', $dateRange));
}
public function status($status)
{
$this->whereIn('ledger_status', explode(',', $status));
}
public function region($region)
{
if (array_key_exists('store_id', $this->input) || ! is_array($region)) {

View File

@ -16,9 +16,9 @@ class ReimbursementFilter extends ModelFilter
$this->where('reimbursement_type_id', explode(',', $id));
}
public function datetimeRange($datetimeRange)
public function createdAt($createdAt)
{
$this->whereBetween('created_at', explode(',', $datetimeRange));
$this->whereBetween('created_at', explode(',', $createdAt));
}
public function status($status)

View File

@ -4,9 +4,7 @@ namespace App\Admin\Services\Finance;
use App\Admin\Filters\LedgerFilter;
use App\Admin\Services\BaseService;
use App\Enums\LedgerStatus;
use App\Models\Ledger;
use Illuminate\Support\Facades\Validator;
class LedgerService extends BaseService
{
@ -16,32 +14,8 @@ class LedgerService extends BaseService
protected array $withRelationships = ['store'];
public function update($primaryKey, $data): bool
public function sortColumn()
{
Validator::validate($data, [
'actual_commission' => ['bail', 'required', 'numeric'],
'actual_income' => ['bail', 'required', 'numeric'],
], [], [
'actual_commission' => __('finance.ledger.actual_commission'),
'actual_income' => __('finance.ledger.actual_income'),
]);
$model = $this->query()->whereKey($primaryKey)->firstOrFail();
switch ($model->ledger_status) {
case LedgerStatus::Processing:
abort(400, '不能编辑待审核的上报数据');
break;
case LedgerStatus::Passed:
abort(400, '不能编辑已完成的上报数据');
break;
}
return $model->update([
'actual_commission' => $data['actual_commission'],
'actual_income' => $data['actual_income'],
'ledger_status' => LedgerStatus::Processing,
]);
return 'id';
}
}

View File

@ -13,4 +13,9 @@ class ReimbursementService extends BaseService
protected string $modelFilterName = ReimbursementFilter::class;
protected array $withRelationships = ['employee', 'type'];
public function sortColumn()
{
return 'id';
}
}

View File

@ -4,7 +4,6 @@ namespace App\Admin\Services\Finance;
use App\Admin\Filters\StoreMasterCommissionFilter;
use App\Admin\Services\BaseService;
use App\Enums\StoreMasterCommissionApprovalStatus;
use App\Models\Store;
use App\Models\StoreMasterCommission;
use Illuminate\Support\Facades\Validator;
@ -19,59 +18,78 @@ class StoreMasterCommissionService extends BaseService
public function store($data): bool
{
$validated = Validator::validate($data, [
'month' => ['bail', 'required', 'date_format:Y-m'],
'store_id' => ['bail', 'required', 'int'],
'commission' => ['bail', 'required', 'numeric'],
'daily_expenses' => ['bail', 'required', 'numeric'],
'employee_expenses' => ['bail', 'required', 'numeric'],
'other_expenses' => ['bail', 'required', 'numeric'],
], [], [
'month' => __('finance.store_master_commission.month'),
'store_id' => __('finance.store_master_commission.store'),
'commission' => __('finance.store_master_commission.commission'),
'daily_expenses' => __('finance.store_master_commission.daily_expenses'),
'employee_expenses' => __('finance.store_master_commission.employee_expenses'),
'other_expenses' => __('finance.store_master_commission.other_expenses'),
]);
$store = Store::findOrFail($validated['store_id']);
$this->modelName::create(
array_merge($validated, ['store_master_id' => $store->master_id])
$validator = Validator::make(
data: $data,
rules: [
'month' => ['bail', 'required', 'date_format:Y-m'],
'store_id' => ['bail', 'required', 'int'],
'commission' => ['bail', 'required', 'numeric'],
'daily_expenses' => ['bail', 'required', 'numeric'],
'employee_expenses' => ['bail', 'required', 'numeric'],
'other_expenses' => ['bail', 'required', 'numeric'],
],
attributes: [
'month' => __('finance.store_master_commission.month'),
'store_id' => __('finance.store_master_commission.store'),
'commission' => __('finance.store_master_commission.commission'),
'daily_expenses' => __('finance.store_master_commission.daily_expenses'),
'employee_expenses' => __('finance.store_master_commission.employee_expenses'),
'other_expenses' => __('finance.store_master_commission.other_expenses'),
],
);
admin_abort_if($validator->fails(), $validator->errors()->first());
$attributes = $validator->validated();
$store = Store::findOrFail($attributes['store_id']);
$attributes['store_master_id'] = $store->master_id;
$this->modelName::create($attributes);
return true;
}
public function update($primaryKey, $data): bool
{
$validated = Validator::validate($data, [
'month' => ['bail', 'required', 'date_format:Y-m'],
'store_id' => ['bail', 'required', 'int'],
'commission' => ['bail', 'required', 'numeric'],
'daily_expenses' => ['bail', 'required', 'numeric'],
'employee_expenses' => ['bail', 'required', 'numeric'],
'other_expenses' => ['bail', 'required', 'numeric'],
], [], [
'month' => __('finance.store_master_commission.month'),
'store_id' => __('finance.store_master_commission.store'),
'commission' => __('finance.store_master_commission.commission'),
'daily_expenses' => __('finance.store_master_commission.daily_expenses'),
'employee_expenses' => __('finance.store_master_commission.employee_expenses'),
'other_expenses' => __('finance.store_master_commission.other_expenses'),
]);
$validator = Validator::make(
data: $data,
rules: [
'month' => ['filled', 'required', 'date_format:Y-m'],
'store_id' => ['filled', 'required', 'int'],
'commission' => ['filled', 'required', 'numeric'],
'daily_expenses' => ['filled', 'required', 'numeric'],
'employee_expenses' => ['filled', 'required', 'numeric'],
'other_expenses' => ['filled', 'required', 'numeric'],
],
attributes: [
'month' => __('finance.store_master_commission.month'),
'store_id' => __('finance.store_master_commission.store'),
'commission' => __('finance.store_master_commission.commission'),
'daily_expenses' => __('finance.store_master_commission.daily_expenses'),
'employee_expenses' => __('finance.store_master_commission.employee_expenses'),
'other_expenses' => __('finance.store_master_commission.other_expenses'),
],
);
admin_abort_if($validator->fails(), $validator->errors()->first());
$attributes = $validator->validated();
$model = $this->query()->whereKey($primaryKey)->firstOrFail();
if ($model->approval_status !== StoreMasterCommissionApprovalStatus::Rejected) {
abort(400, '只能编辑状态是“未通过”的店长提成');
// 如果门店发生改变,则更新店长
if ($model->store_id != $attributes['store_id']) {
$store = Store::findOrFail($attributes['store_id']);
$attributes['store_master_id'] = $store->master_id;
}
$attributes = array_merge(
$validated, ['approval_status' => StoreMasterCommissionApprovalStatus::Pending]
);
return $model->update($attributes);
}
public function sortColumn()
{
return 'id';
}
}