diff --git a/app/Admin/Controllers/Store/StockTotalController.php b/app/Admin/Controllers/Store/StockTotalController.php
index d5db3275..23dfc546 100644
--- a/app/Admin/Controllers/Store/StockTotalController.php
+++ b/app/Admin/Controllers/Store/StockTotalController.php
@@ -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 = '
| | | ';
+ $html = '';
$html .= '| 入库总成本: '.data_get($total, 'total_in').' | ';
$html .= '销售总金额: '.data_get($total, 'total_sell').' | ';
$html .= '线上销售总金额: '.data_get($total, 'total_online').' | ';
diff --git a/app/Admin/Forms/OrderPackage.php b/app/Admin/Forms/OrderPackage.php
index e4348fdf..4448a678 100644
--- a/app/Admin/Forms/OrderPackage.php
+++ b/app/Admin/Forms/OrderPackage.php
@@ -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,
]);
}
}
diff --git a/app/Admin/Repositories/StoreTockRepository.php b/app/Admin/Repositories/StoreTockRepository.php
index 8cf2f392..82da5e28 100644
--- a/app/Admin/Repositories/StoreTockRepository.php
+++ b/app/Admin/Repositories/StoreTockRepository.php
@@ -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);
+ },
]);
// 查询条件
diff --git a/app/Listeners/OrderPackage.php b/app/Listeners/OrderPackage.php
index 11fbe3ba..6dfc0bd3 100644
--- a/app/Listeners/OrderPackage.php
+++ b/app/Listeners/OrderPackage.php
@@ -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
]);
}
}
diff --git a/app/Models/Store/ProductSku.php b/app/Models/Store/ProductSku.php
index 5f01257d..ddabe8ff 100644
--- a/app/Models/Store/ProductSku.php
+++ b/app/Models/Store/ProductSku.php
@@ -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');
+ }
}