6
0
Fork 0

线上/线下发货时,固定库存记录类别

base
panliang 2023-08-14 14:29:27 +08:00
parent 9d4047032c
commit 20e8d15cbe
5 changed files with 37 additions and 15 deletions

View File

@ -15,6 +15,13 @@ class StockTotalController extends AdminController
protected function grid() protected function grid()
{ {
// return Grid::make(ProductSku::with(['productSku.category', 'stockLogs']), function (Grid $grid) { // return Grid::make(ProductSku::with(['productSku.category', 'stockLogs']), function (Grid $grid) {
$request = request();
if (!$request->filled('date.start')) {
$request->offsetSet('date.start', now()->startOfMonth()->format('Y-m-d'));
}
if (!$request->filled('date.end')) {
$request->offsetSet('date.end', now()->format('Y-m-d'));
}
return Grid::make(new StoreTockRepository, function (Grid $grid) { return Grid::make(new StoreTockRepository, function (Grid $grid) {
$tags = StockLog::tags()->get(); $tags = StockLog::tags()->get();
$grid->column('store_name', '门店'); $grid->column('store_name', '门店');
@ -23,6 +30,7 @@ class StockTotalController extends AdminController
$grid->column('cost_price', '成本单价'); $grid->column('cost_price', '成本单价');
$grid->column('sell_price', '售价'); $grid->column('sell_price', '售价');
$grid->column('init_stock', '初期库存');
$grid->column('tag_in', '入库数'); $grid->column('tag_in', '入库数');
$grid->column('tag_sell', '销售数'); $grid->column('tag_sell', '销售数');
$grid->column('tag_online', '线上销售数'); $grid->column('tag_online', '线上销售数');
@ -45,7 +53,7 @@ class StockTotalController extends AdminController
$grid->footer(function ($collection) use ($grid) { $grid->footer(function ($collection) use ($grid) {
$total = $grid->model()->repository()->getTotal($grid->model()); $total = $grid->model()->repository()->getTotal($grid->model());
$html = '<table class="table table-bordered"><tbody><tr><td></td><td></td><td></td>'; $html = '<table class="table table-bordered"><tbody><tr>';
$html .= '<td>入库总成本: '.data_get($total, 'total_in').'</td>'; $html .= '<td>入库总成本: '.data_get($total, 'total_in').'</td>';
$html .= '<td>销售总金额: '.data_get($total, 'total_sell').'</td>'; $html .= '<td>销售总金额: '.data_get($total, 'total_sell').'</td>';
$html .= '<td>线上销售总金额: '.data_get($total, 'total_online').'</td>'; $html .= '<td>线上销售总金额: '.data_get($total, 'total_online').'</td>';

View File

@ -12,7 +12,7 @@ use Illuminate\Support\Facades\DB;
use Throwable; use Throwable;
use Dcat\Admin\Admin; use Dcat\Admin\Admin;
use App\Models\Store\ProductSku as StoreProductSku; use App\Models\Store\ProductSku as StoreProductSku;
use App\Models\Store\Store; use App\Models\Store\{Store, StockLog};
class OrderPackage extends Form implements LazyRenderable class OrderPackage extends Form implements LazyRenderable
{ {
@ -48,14 +48,11 @@ class OrderPackage extends Form implements LazyRenderable
$orderPackageService->createPackage($order, $input); $orderPackageService->createPackage($order, $input);
// 店铺发货, 添加出库记录 // 店铺发货, 添加出库记录
$store_id = data_get($input, 'store_id', $order->store_id); $store_id = data_get($input, 'store_id', $order->store_id);
$tag_id = StockLog::TAG_SEND;
if ($store_id) { if ($store_id) {
$packageProducts = $input['packages']; $packageProducts = $input['packages'];
$operator = Admin::user(); $operator = Admin::user();
$store = Store::findOrFail($store_id); $store = Store::findOrFail($store_id);
$tag = Tag::firstOrCreate([
'type' => Tag::TYPE_STORE_STOCK,
'name' => '发货'
]);
foreach($packageProducts as $item) { foreach($packageProducts as $item) {
$order_product = $order->products()->findOrFail($item['order_product_id']); $order_product = $order->products()->findOrFail($item['order_product_id']);
$amount = $item['quantity']; $amount = $item['quantity'];
@ -77,7 +74,7 @@ class OrderPackage extends Form implements LazyRenderable
'amount' => 0-$amount, 'amount' => 0-$amount,
'product_sku_id' => $product->id, 'product_sku_id' => $product->id,
'remarks' => '后台发货', 'remarks' => '后台发货',
'tag_id' => $tag->id 'tag_id' => $tag_id,
]); ]);
} }
} }

View File

@ -49,6 +49,8 @@ class StoreTockRepository extends Repository
'tag_loss' => $loss, 'tag_loss' => $loss,
// 自用数 // 自用数
'tag_self' => $self, 'tag_self' => $self,
// 初期库存
'init_stock' => data_get($item->stockLog, 'balance', 0),
// 调货数 = 出库数 // 调货数 = 出库数
'tag_out' => $stock->where('product_sku_id', $item->product_sku_id)->where('tag_id', StockLog::TAG_OUT)->sum('amount'), 'tag_out' => $stock->where('product_sku_id', $item->product_sku_id)->where('tag_id', StockLog::TAG_OUT)->sum('amount'),
// 毛利 = (入库数-报损数-自用数) x (售价-成本) // 毛利 = (入库数-报损数-自用数) x (售价-成本)
@ -68,14 +70,27 @@ class StoreTockRepository extends Repository
'stockLogs' => function ($q) use ($model) { 'stockLogs' => function ($q) use ($model) {
$q->select('id', 'product_sku_id', DB::raw('abs(`amount`) as `amount`'), 'tag_id'); $q->select('id', 'product_sku_id', DB::raw('abs(`amount`) as `amount`'), 'tag_id');
if ($start = $model->filter()->input('date.start')) { if ($start = $model->filter()->input('date.start')) {
$start = Carbon::createFromFormat('Y-m-d', $start); $start = Carbon::createFromFormat('Y-m-d', $start)->startOfDay();
$q->where('created_at', '>=', $start); $q->where('created_at', '>=', $start);
} }
if ($end = $model->filter()->input('date.end')) { if ($end = $model->filter()->input('date.end')) {
$end = Carbon::createFromFormat('Y-m-d', $end); $end = Carbon::createFromFormat('Y-m-d', $end)->endOfDay();
$q->where('created_at', '<=', $end); $q->where('created_at', '<=', $end);
} }
} if ($store_id = $model->filter()->input('store_id')) {
$q->where('store_id', $store_id);
}
},
'stockLog' => function ($q) use ($model) {
if ($store_id = $model->filter()->input('store_id')) {
$q->where('store_id', $store_id);
}
if ($start = $model->filter()->input('date.start')) {
$start = Carbon::createFromFormat('Y-m-d', $start)->startOfDay();
$q->where('created_at', '<=', $start);
}
$q->orderBy('created_at', 'desc')->limit(1);
},
]); ]);
// 查询条件 // 查询条件

View File

@ -9,6 +9,7 @@ use App\Models\{Order, OrderPre, Tag, User};
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Throwable; use Throwable;
use App\Exceptions\BizException; use App\Exceptions\BizException;
use App\Models\Store\StockLog;
class OrderPackage class OrderPackage
{ {
@ -39,10 +40,6 @@ class OrderPackage
$inviter = $order->inviter_id ? User::find($order->inviter_id) : null; $inviter = $order->inviter_id ? User::find($order->inviter_id) : null;
try { try {
DB::beginTransaction(); DB::beginTransaction();
$tag = Tag::firstOrCreate([
'type' => Tag::TYPE_STORE_STOCK,
'name' => '提货'
]);
$order_products = $order->products; $order_products = $order->products;
// 根据 order_pres 发货数量, 自动发货 // 根据 order_pres 发货数量, 自动发货
$service_package = new \App\Admin\Services\OrderPackageService(); $service_package = new \App\Admin\Services\OrderPackageService();
@ -80,7 +77,7 @@ class OrderPackage
'balance' => $balance, 'balance' => $balance,
'product_sku_id' => $product->id, 'product_sku_id' => $product->id,
'remarks' => '店铺提货(自动)', 'remarks' => '店铺提货(自动)',
'tag_id' => $tag->id 'tag_id' => StockLog::TAG_CARRY
]); ]);
} }
} }

View File

@ -36,4 +36,9 @@ class ProductSku extends Model
{ {
return $this->hasMany(StockLog::class, 'product_sku_id', 'product_sku_id'); return $this->hasMany(StockLog::class, 'product_sku_id', 'product_sku_id');
} }
public function stockLog()
{
return $this->hasOne(StockLog::class, 'product_sku_id', 'product_sku_id');
}
} }