线上/线下发货时,固定库存记录类别
parent
9d4047032c
commit
20e8d15cbe
|
|
@ -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>';
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
},
|
||||
]);
|
||||
|
||||
// 查询条件
|
||||
|
|
|
|||
|
|
@ -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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue