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()
{
// 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) {
$tags = StockLog::tags()->get();
$grid->column('store_name', '门店');
@ -23,6 +30,7 @@ class StockTotalController extends AdminController
$grid->column('cost_price', '成本单价');
$grid->column('sell_price', '售价');
$grid->column('init_stock', '初期库存');
$grid->column('tag_in', '入库数');
$grid->column('tag_sell', '销售数');
$grid->column('tag_online', '线上销售数');
@ -45,7 +53,7 @@ class StockTotalController extends AdminController
$grid->footer(function ($collection) use ($grid) {
$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_sell').'</td>';
$html .= '<td>线上销售总金额: '.data_get($total, 'total_online').'</td>';

View File

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

View File

@ -49,6 +49,8 @@ class StoreTockRepository extends Repository
'tag_loss' => $loss,
// 自用数
'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'),
// 毛利 = (入库数-报损数-自用数) x (售价-成本)
@ -68,14 +70,27 @@ class StoreTockRepository extends Repository
'stockLogs' => function ($q) use ($model) {
$q->select('id', 'product_sku_id', DB::raw('abs(`amount`) as `amount`'), 'tag_id');
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);
}
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);
}
}
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 Throwable;
use App\Exceptions\BizException;
use App\Models\Store\StockLog;
class OrderPackage
{
@ -39,10 +40,6 @@ class OrderPackage
$inviter = $order->inviter_id ? User::find($order->inviter_id) : null;
try {
DB::beginTransaction();
$tag = Tag::firstOrCreate([
'type' => Tag::TYPE_STORE_STOCK,
'name' => '提货'
]);
$order_products = $order->products;
// 根据 order_pres 发货数量, 自动发货
$service_package = new \App\Admin\Services\OrderPackageService();
@ -80,7 +77,7 @@ class OrderPackage
'balance' => $balance,
'product_sku_id' => $product->id,
'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');
}
public function stockLog()
{
return $this->hasOne(StockLog::class, 'product_sku_id', 'product_sku_id');
}
}