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