上报数据项

main
Jing Li 2024-03-28 16:31:14 +08:00
parent 5359f742e4
commit d63aee36af
5 changed files with 166 additions and 40 deletions

View File

@ -20,6 +20,74 @@ class LedgerController extends AdminController
{
protected string $serviceName = LedgerService::class;
public function show($id)
{
if ($this->actionOfGetData()) {
/** @var \App\Models\Ledger */
$ledger = Ledger::findOrFail($id);
$ledger->load(['store', 'items.type']);
return $this->response()->success(
array_merge($ledger->toArray(), [
'items_property' => collect($ledger->items)->map(fn ($item) => [
['label' => '类型', 'content' => $item->type?->name ?? '-'],
['label' => '销售', 'content' => $item->sales],
['label' => $item->ledger_item_type_id === 'ledger_item_type_other' ? '支出' : '兑奖', 'content' => $item->expenditure],
])->collapse()->all()
])
);
}
$detail = amis()
->Card()
->className('base-form')
->header(['title' => __('admin.detail')])
->body($this->detail())
->toolbar([$this->backButton()]);
$page = $this->basePage()->body($detail);
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 list(): Page
{
$crud = $this->baseCRUD()
@ -96,7 +164,7 @@ class LedgerController extends AdminController
public function detail(): Form
{
return $this->baseDetail()->title()->body([
amis()->Property()->title('上报数据')->column(2)->items([
amis()->Property()->column(2)->items([
['label' => __('finance.ledger.date'), 'content' => '${date}'],
['label' => __('finance.ledger.store'), 'content' => '${store.title}'],
['label' => __('finance.ledger.sales'), 'content' => '${sales}'],
@ -105,50 +173,17 @@ class LedgerController extends AdminController
['label' => __('finance.ledger.actual_commission'), 'content' => '${actual_commission}'],
['label' => __('finance.ledger.expected_income'), 'content' => '${expected_income}'],
['label' => __('finance.ledger.actual_income'), 'content' => '${actual_income}'],
[
'label' => '上报数据',
'content' => amis()->Property()->source('${items_property}'),
'span' => 2
],
['label' => __('finance.ledger.photos'), 'content' => amis()->Images()->enlargeAble()->source('${photos}')->enlargeWithGallary(), 'span' => 2],
['label' => __('finance.ledger.ledger_status'), 'content' => amis()->Mapping()->map(LedgerStatus::labelMap())->value('${ledger_status}'), 'span' => 2],
]),
]);
}
/**
* 审核
*/
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, '操作成功');
}
protected function rowApprovalButton()
{
return amis()->DialogAction()->icon('fa-regular fa-check-circle')->label(__('finance.ledger.approval'))->level('link')->dialog(

View File

@ -9,6 +9,7 @@ use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Ledger extends Model
{
@ -40,6 +41,11 @@ class Ledger extends Model
return $this->belongsTo(Store::class);
}
public function items(): HasMany
{
return $this->hasMany(LedgerItem::class);
}
protected function photos(): Attribute
{
return Attribute::make(

View File

@ -0,0 +1,39 @@
<?php
namespace App\Models;
use App\Traits\HasDateTimeFormatter;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class LedgerItem extends Model
{
use Filterable, HasDateTimeFormatter, HasFactory;
protected $casts = [
'date' => 'date',
'approved' => 'bool',
];
protected $fillable = [
'ledger_id',
'ledger_item_type_id',
'store_id',
'date',
'sales',
'expenditure',
'approved',
];
public function ledger(): BelongsTo
{
return $this->belongsTo(Ledger::class);
}
public function type(): BelongsTo
{
return $this->belongsTo(Keyword::class, 'ledger_item_type_id', 'key');
}
}

View File

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('ledger_items', function (Blueprint $table) {
$table->id();
$table->foreignId('ledger_id')->comment('上报数据ID');
$table->string('ledger_item_type_id')->comment('上报数据类型, keywords.ledger_item_type');
$table->foreignId('store_id')->comment('门店ID');
$table->date('date')->comment('日期');
$table->decimal('sales', 10, 2)->comment('销量');
$table->decimal('expenditure', 10, 2)->comment('支出');
$table->boolean('approved')->default(false)->comment('是否审核通过');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('ledger_items');
}
};

View File

@ -70,7 +70,19 @@ class KeywordSeeder extends Seeder
[
'key' => 'lottery_type',
'name' => '彩种类型',
'children' => ['大乐透', '七星彩', '排列三', '排列五', '合买', '即开'],
'children' => [
['name' => '大乐透', 'value' => 'ledger_item_type_1'],
['name' => '七星彩', 'value' => 'ledger_item_type_2'],
['name' => '排列三', 'value' => 'ledger_item_type_3'],
['name' => '排列五', 'value' => 'ledger_item_type_4'],
['name' => '合买', 'value' => 'ledger_item_type_5'],
['name' => '即开', 'value' => 'ledger_item_type_6'],
],
],
[
'key' => 'ledger_item_type',
'name' => '上报数据类型',
'children' => ['大乐透', '七星彩', '排列三', '排列五', '合买', '即开', ['key' => 'ledger_item_type_other', 'name' => '其他']],
],
];