Commit ef0aac4b authored by wxl's avatar wxl

其他出库,销售订单出库记录

parent f1ef55b5
...@@ -28,7 +28,9 @@ use Sales\Service\SalesOrderGoodsManager; ...@@ -28,7 +28,9 @@ use Sales\Service\SalesOrderGoodsManager;
use Sales\Service\SalesOrderManager; use Sales\Service\SalesOrderManager;
use Sales\Service\SalesSendOrderManager; use Sales\Service\SalesSendOrderManager;
use Sales\Service\SalesSendWarehouseGoodsManager; use Sales\Service\SalesSendWarehouseGoodsManager;
use Stock\Form\OtherWarehouseOrderForm;
use Store\Entity\WarehouseGoods; use Store\Entity\WarehouseGoods;
use Store\Service\AllExWarehouseOrderGoodsManager;
use Store\Service\GoodsManager; use Store\Service\GoodsManager;
use Store\Service\WarehouseGoodsManager; use Store\Service\WarehouseGoodsManager;
use Laminas\Mvc\Controller\AbstractActionController; use Laminas\Mvc\Controller\AbstractActionController;
...@@ -300,14 +302,18 @@ class SalesOrderController extends AbstractActionController ...@@ -300,14 +302,18 @@ class SalesOrderController extends AbstractActionController
$this->flashMessenger()->addWarningMessage($this->translator->translate('该订单不存在!')); $this->flashMessenger()->addWarningMessage($this->translator->translate('该订单不存在!'));
return $this->redirect()->toRoute('sales-order'); return $this->redirect()->toRoute('sales-order');
} }
$allExWarehouseOrderGoodsManager = new AllExWarehouseOrderGoodsManager($this->entityManager);
$salesOrderGoods = $this->entityManager->getRepository(SalesOrderGoods::class)->findBy(['salesOrderId' => $salesOrderId], ['salesGoodsId' => 'ASC']); $salesOrderGoods = $this->entityManager->getRepository(SalesOrderGoods::class)->findBy(['salesOrderId' => $salesOrderId], ['salesGoodsId' => 'ASC']);
$form = new SendOrderForm($this->entityManager, $salesOrderGoods); $form = new SendOrderForm($this->entityManager, $salesOrderGoods);
$otherForm = new OtherWarehouseOrderForm($this->entityManager);
if($this->getRequest()->isPost()) { if($this->getRequest()->isPost()) {
$data = $this->params()->fromPost(); $data = $this->params()->fromPost();
$warehouseOrderSn=$data['warehouseOrderSn'];
$form->setData($data); $form->setData($data);
if($form->isValid()) { if($form->isValid()) {
$data = $form->getData(); $data = $form->getData();
$this->entityManager->beginTransaction(); $this->entityManager->beginTransaction();
try { try {
$sendOrder = $this->salesSendOrderManager->addSalesSendOrder($data, $salesOrderInfo, $this->adminSession('admin_id')); $sendOrder = $this->salesSendOrderManager->addSalesSendOrder($data, $salesOrderInfo, $this->adminSession('admin_id'));
...@@ -318,6 +324,8 @@ class SalesOrderController extends AbstractActionController ...@@ -318,6 +324,8 @@ class SalesOrderController extends AbstractActionController
$this->salesGoodsPriceLogManager->addSalesGoodsPriceLog($salesOrderGoods, $salesOrderId, time()); $this->salesGoodsPriceLogManager->addSalesGoodsPriceLog($salesOrderGoods, $salesOrderId, time());
$goodsState = $this->goodsManager->outGoodsStock($sendArray['goods']); $goodsState = $this->goodsManager->outGoodsStock($sendArray['goods']);
$allExWarehouseOrderGoodsManager->addSalesWarehouseOrderGoods($sendArray['warehouseGoods'], $sendOrder,$warehouseOrderSn);
if(!$sendWarehouseGoodsState || !$goodsState) $this->entityManager->rollback(); if(!$sendWarehouseGoodsState || !$goodsState) $this->entityManager->rollback();
$this->salesOrderManager->updateSalesOrderState(6, $salesOrderInfo); $this->salesOrderManager->updateSalesOrderState(6, $salesOrderInfo);
...@@ -342,7 +350,7 @@ class SalesOrderController extends AbstractActionController ...@@ -342,7 +350,7 @@ class SalesOrderController extends AbstractActionController
} }
} }
return ['form' => $form, 'orderInfo' => $salesOrderInfo, 'orderGoods' => $salesOrderGoods, 'warehouse' => $warehouseArray]; return ['form' => $form, 'orderInfo' => $salesOrderInfo, 'orderGoods' => $salesOrderGoods, 'warehouse' => $warehouseArray,'otherForm'=>$otherForm];
} }
/** /**
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
namespace Sales\Validator; namespace Sales\Validator;
use Laminas\I18n\Translator\Translator; use Laminas\I18n\Translator\Translator;
use Store\Entity\AllWarehouseOrderGoods;
use Store\Entity\WarehouseGoods; use Store\Entity\WarehouseGoods;
use Laminas\Validator\AbstractValidator; use Laminas\Validator\AbstractValidator;
...@@ -22,6 +23,8 @@ class SendOrderWarehouseValidator extends AbstractValidator ...@@ -22,6 +23,8 @@ class SendOrderWarehouseValidator extends AbstractValidator
{ {
const NOT_SCALAR = 'notScalar'; const NOT_SCALAR = 'notScalar';
const WAREHOUSE_NOT_STOCK = 'warehouseNotStock'; const WAREHOUSE_NOT_STOCK = 'warehouseNotStock';
const GOODS_SN_NOT_WAREHOUSE = 'goodsSnNotWarehouse';
const GOODS_ORDER_SN_NOT_WAREHOUSE = 'goodsOrderSnNotWarehouse';
protected $messageTemplates = []; protected $messageTemplates = [];
...@@ -36,13 +39,15 @@ class SendOrderWarehouseValidator extends AbstractValidator ...@@ -36,13 +39,15 @@ class SendOrderWarehouseValidator extends AbstractValidator
$trans = new Translator(); $trans = new Translator();
$this->messageTemplates = [ $this->messageTemplates = [
self::NOT_SCALAR => $trans->translate("这不是一个标准输入值"), self::NOT_SCALAR => $trans->translate("这不是一个标准输入值"),
self::WAREHOUSE_NOT_STOCK => $trans->translate("库存不足,无法发货") self::WAREHOUSE_NOT_STOCK => $trans->translate("库存不足,无法发货"),
self::GOODS_SN_NOT_WAREHOUSE => $trans->translate("商品入库单号在仓库中不存在"),
self::GOODS_ORDER_SN_NOT_WAREHOUSE => $trans->translate("该商品入库单号在仓库中的数量小于出库量"),
]; ];
parent::__construct($options); parent::__construct($options);
} }
public function isValid($value) public function isValid($value,$context=null): bool
{ {
if (!is_array($value)) { if (!is_array($value)) {
$this->error(self::NOT_SCALAR); $this->error(self::NOT_SCALAR);
...@@ -56,11 +61,29 @@ class SendOrderWarehouseValidator extends AbstractValidator ...@@ -56,11 +61,29 @@ class SendOrderWarehouseValidator extends AbstractValidator
$this->error(self::WAREHOUSE_NOT_STOCK); $this->error(self::WAREHOUSE_NOT_STOCK);
return false; return false;
} }
$stockNum = $this->entityManager->getRepository(WarehouseGoods::class)->findMoreWarehouseGoodsNum($value[$goodsValue->getGoodsId()], $goodsValue->getGoodsId()); $stockNum = $this->entityManager->getRepository(WarehouseGoods::class)->findMoreWarehouseGoodsNum($value[$goodsValue->getGoodsId()], $goodsValue->getGoodsId());
if($goodsValue->getSalesGoodsSellNum() > $stockNum) { if($goodsValue->getSalesGoodsSellNum() > $stockNum) {
$this->error(self::WAREHOUSE_NOT_STOCK); $this->error(self::WAREHOUSE_NOT_STOCK);
return false; return false;
} }
if($context['warehouseOrderSn']){
$allWarehouseGoods=$this->entityManager->getRepository(AllWarehouseOrderGoods::class)->findWarehouseGoodsIdSearch(['goods_id' => $goodsValue->getGoodsId(),'warehouse_order_sn'=>$context['warehouseOrderSn'],'warehouseIds'=>$value[$goodsValue->getGoodsId()],'out_num'=>1]);
if (!$allWarehouseGoods) {
$this->error(self::GOODS_SN_NOT_WAREHOUSE);
return false;
}
$WarehouseGoodsStock=0;
foreach ($allWarehouseGoods as $k=>$v){
$WarehouseGoodsStock += $v->getoutNum();
}
if ($WarehouseGoodsStock < $goodsValue->getSalesGoodsSellNum()) {
$this->error(self::GOODS_ORDER_SN_NOT_WAREHOUSE);
return false;
}
}
} }
return true; return true;
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
<?php <?php
$form = $this->form; $form = $this->form;
$form->prepare(); $form->prepare();
$otherForm = $this->otherForm;
$otherForm->prepare();
?> ?>
<?php echo $this->form()->openTag($form); ?> <?php echo $this->form()->openTag($form); ?>
<section class="content-header"> <section class="content-header">
...@@ -93,6 +96,13 @@ ...@@ -93,6 +96,13 @@
<?php echo $this->formElementErrors($form->get('sendOrderSn'), ['class'=>'error-message']); ?> <?php echo $this->formElementErrors($form->get('sendOrderSn'), ['class'=>'error-message']); ?>
</div> </div>
</div> </div>
<div class="col-xs-4 form-group">
<div class="col-sm-12">
<?php echo $this->translate('入库单号'); ?>
<?php echo $this->formElement($otherForm->get('warehouseOrderSn')); ?>
<?php echo $this->formElementErrors($otherForm->get('warehouseOrderSn'), ['class'=>'error-message']); ?>
</div>
</div>
</div> </div>
<div class="box-header"> <div class="box-header">
<h4 class="box-title"><?php echo $this->translate('发货商品'); ?></h4> <h4 class="box-title"><?php echo $this->translate('发货商品'); ?></h4>
......
...@@ -22,8 +22,11 @@ use Stock\Entity\ExWarehouseOrderGoods; ...@@ -22,8 +22,11 @@ use Stock\Entity\ExWarehouseOrderGoods;
use Stock\Form\ExOrderSearchForm; use Stock\Form\ExOrderSearchForm;
use Stock\Form\ExWarehouseOrderForm; use Stock\Form\ExWarehouseOrderForm;
use Stock\Form\ExWarehouseOrderGoodsForm; use Stock\Form\ExWarehouseOrderGoodsForm;
use Stock\Form\OtherWarehouseOrderForm;
use Stock\Service\ExWarehouseOrderGoodsManager; use Stock\Service\ExWarehouseOrderGoodsManager;
use Stock\Service\ExWarehouseOrderManager; use Stock\Service\ExWarehouseOrderManager;
use Store\Entity\AllWarehouseOrderGoods;
use Store\Service\AllExWarehouseOrderGoodsManager;
class ExWarehouseController extends AbstractActionController class ExWarehouseController extends AbstractActionController
{ {
...@@ -87,11 +90,13 @@ class ExWarehouseController extends AbstractActionController ...@@ -87,11 +90,13 @@ class ExWarehouseController extends AbstractActionController
{ {
$goodsForm = new ExWarehouseOrderGoodsForm($this->entityManager); $goodsForm = new ExWarehouseOrderGoodsForm($this->entityManager);
$form = new ExWarehouseOrderForm($this->entityManager); $form = new ExWarehouseOrderForm($this->entityManager);
$otherForm = new OtherWarehouseOrderForm($this->entityManager);
$allExWarehouseOrderGoodsManager = new AllExWarehouseOrderGoodsManager($this->entityManager);
$form->get('warehouseId')->setValueOptions($this->storeCommon()->warehouseListOptions()); $form->get('warehouseId')->setValueOptions($this->storeCommon()->warehouseListOptions());
if($this->getRequest()->isPost()) { if($this->getRequest()->isPost()) {
$data = $this->params()->fromPost(); $data = $this->params()->fromPost();
$warehouseOrderSn=$data['warehouseOrderSn'];
$form->setData($data); $form->setData($data);
$goodsForm->setData($data); $goodsForm->setData($data);
if ($form->isValid() && $goodsForm->isValid()) { if ($form->isValid() && $goodsForm->isValid()) {
...@@ -102,7 +107,7 @@ class ExWarehouseController extends AbstractActionController ...@@ -102,7 +107,7 @@ class ExWarehouseController extends AbstractActionController
try { try {
$exWarehouseOrder = $this->exWarehouseOrderManager->addExWarehouseOrder($data, $goodsData, $this->adminSession('admin_id')); $exWarehouseOrder = $this->exWarehouseOrderManager->addExWarehouseOrder($data, $goodsData, $this->adminSession('admin_id'));
$this->exWarehouseOrderGoodsManager->addExWarehouseOrderGoods($goodsData, $data['warehouseId'], $exWarehouseOrder->getExWarehouseOrderId()); $this->exWarehouseOrderGoodsManager->addExWarehouseOrderGoods($goodsData, $data['warehouseId'], $exWarehouseOrder->getExWarehouseOrderId());
$allExWarehouseOrderGoodsManager->addExWarehouseOrderGoods($goodsData, $data['warehouseId'], $exWarehouseOrder->getExWarehouseOrderId(),$warehouseOrderSn);
$this->getEventManager()->trigger('ex-warehouse-order.out.post', $this, $exWarehouseOrder); $this->getEventManager()->trigger('ex-warehouse-order.out.post', $this, $exWarehouseOrder);
$this->entityManager->commit(); $this->entityManager->commit();
...@@ -117,7 +122,7 @@ class ExWarehouseController extends AbstractActionController ...@@ -117,7 +122,7 @@ class ExWarehouseController extends AbstractActionController
} }
} else $form->get('exWarehouseOrderSn')->setValue($this->stockPlugin()->createExWarehouseOrderSn()); } else $form->get('exWarehouseOrderSn')->setValue($this->stockPlugin()->createExWarehouseOrderSn());
return ['form' => $form, 'goodsForm' => $goodsForm]; return ['form' => $form, 'goodsForm' => $goodsForm,'otherForm'=>$otherForm];
} }
/** /**
......
...@@ -16,6 +16,7 @@ namespace Stock\Validator; ...@@ -16,6 +16,7 @@ namespace Stock\Validator;
use Laminas\I18n\Translator\Translator; use Laminas\I18n\Translator\Translator;
use Laminas\Validator\AbstractValidator; use Laminas\Validator\AbstractValidator;
use Store\Entity\AllWarehouseOrderGoods;
use Store\Entity\Goods; use Store\Entity\Goods;
use Store\Entity\WarehouseGoods; use Store\Entity\WarehouseGoods;
...@@ -29,6 +30,8 @@ class ExWarehouseOrderGoodsArrayValidator extends AbstractValidator ...@@ -29,6 +30,8 @@ class ExWarehouseOrderGoodsArrayValidator extends AbstractValidator
const EX_NUM_NOT_ZERO = 'exNumNotZero'; const EX_NUM_NOT_ZERO = 'exNumNotZero';
const GOODS_AMOUNT_NOT_MINUS= 'goodsAmountNotMinus'; const GOODS_AMOUNT_NOT_MINUS= 'goodsAmountNotMinus';
const GOODS_TAX_NOT_MINUS = 'goodsTaxNotMinus'; const GOODS_TAX_NOT_MINUS = 'goodsTaxNotMinus';
const GOODS_SN_NOT_WAREHOUSE = 'goodsSnNotWarehouse';
const GOODS_ORDER_SN_NOT_WAREHOUSE = 'goodsOrderSnNotWarehouse';
private $entityManager; private $entityManager;
private $goodsField; private $goodsField;
...@@ -52,6 +55,8 @@ class ExWarehouseOrderGoodsArrayValidator extends AbstractValidator ...@@ -52,6 +55,8 @@ class ExWarehouseOrderGoodsArrayValidator extends AbstractValidator
self::EX_NUM_NOT_ZERO => $trans->translate("出库数量不能小于等于0"), self::EX_NUM_NOT_ZERO => $trans->translate("出库数量不能小于等于0"),
self::GOODS_AMOUNT_NOT_MINUS => $trans->translate("商品总价不能为负数"), self::GOODS_AMOUNT_NOT_MINUS => $trans->translate("商品总价不能为负数"),
self::GOODS_TAX_NOT_MINUS => $trans->translate("税金不能为负数"), self::GOODS_TAX_NOT_MINUS => $trans->translate("税金不能为负数"),
self::GOODS_SN_NOT_WAREHOUSE => $trans->translate("商品入库单号在仓库中不存在"),
self::GOODS_ORDER_SN_NOT_WAREHOUSE => $trans->translate("该商品入库单号在仓库中的数量小于出库量"),
]; ];
parent::__construct($options); parent::__construct($options);
...@@ -82,6 +87,22 @@ class ExWarehouseOrderGoodsArrayValidator extends AbstractValidator ...@@ -82,6 +87,22 @@ class ExWarehouseOrderGoodsArrayValidator extends AbstractValidator
$this->error(self::EX_GOODS_NUM_WAREHOUSE_ERROR); $this->error(self::EX_GOODS_NUM_WAREHOUSE_ERROR);
return false; return false;
} }
if($context['warehouseOrderSn']){
$allWarehouseGoods=$this->entityManager->getRepository(AllWarehouseOrderGoods::class)->findWarehouseGoodsIdSearch(['goods_id' => $item,'warehouse_order_sn'=>$context['warehouseOrderSn'],'warehouse_id'=>$context['warehouseId'],'out_num'=>1]);
if (!$allWarehouseGoods) {
$this->error(self::GOODS_SN_NOT_WAREHOUSE);
return false;
}
$WarehouseGoodsStock=0;
foreach ($allWarehouseGoods as $k=>$v){
$WarehouseGoodsStock += $v->getoutNum();
}
if ($WarehouseGoodsStock < $context['goodsExNum'][$key]) {
$this->error(self::GOODS_ORDER_SN_NOT_WAREHOUSE);
return false;
}
}
} }
break; break;
......
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
$goodsForm = $this->goodsForm; $goodsForm = $this->goodsForm;
$goodsForm->prepare(); $goodsForm->prepare();
$otherForm = $this->otherForm;
$otherForm->prepare();
$form->get('exWarehouseOrderSn')->setAttributes([ $form->get('exWarehouseOrderSn')->setAttributes([
'placeholder' => $this->translate('出库单号') 'placeholder' => $this->translate('出库单号')
]); ]);
...@@ -14,6 +17,9 @@ ...@@ -14,6 +17,9 @@
'placeholder' => $this->translate('备注') 'placeholder' => $this->translate('备注')
]); ]);
$otherForm->get('warehouseOrderSn')->setAttributes([
'placeholder' => $this->translate('入库单号')
]);
?> ?>
<?php echo $this->form()->openTag($form); ?> <?php echo $this->form()->openTag($form); ?>
<section class="content-header"> <section class="content-header">
...@@ -63,6 +69,16 @@ ...@@ -63,6 +69,16 @@
</div> </div>
</div> </div>
<div class="row">
<div class="col-xs-4 form-group">
<div class="col-sm-12">
<?php echo $this->translate('入库单号'); ?>
<?php echo $this->formElement($otherForm->get('warehouseOrderSn')); ?>
<?php echo $this->formElementErrors($otherForm->get('warehouseOrderSn'), ['class'=>'error-message']); ?>
</div>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-4 form-group"> <div class="col-xs-4 form-group">
......
<?php
/**
* DBERP 进销存系统
*
* ==========================================================================
* @link http://www.dberp.net/
* @copyright 北京珑大钜商科技有限公司,并保留所有权利。
* @license http://www.dberp.net/license.html License
* ==========================================================================
*
* @author 静静的风 <baron@loongdom.cn>
*
*/
namespace Store\Entity;
use Admin\Entity\BaseEntity;
use Doctrine\ORM\Mapping as ORM;
/**
* 其他出库销售订单商品
* @ORM\Entity(repositoryClass="Store\Repository\AllExWarehouseOrderGoodsRepository")
* @ORM\Table(name="dberp_all_ex_warehouse_order_goods")
*/
class AllExWarehouseOrderGoods extends BaseEntity
{
/**
* 出库商品id
* @ORM\Id()
* @ORM\Column(name="all_ex_warehouse_order_goods_id", type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $allExWarehouseOrderGoodsId;
/**
* 出库对应表id
* @ORM\Column(name="ex_warehouse_order_id", type="integer", length=11)
*/
private $exWarehouseOrderId;
/**
* 销售订单对应表id
* @ORM\Column(name="send_order_id", type="integer", length=11)
*/
private $sendOrderId;
/**
* 其他出库销售订单对应表出库单号
* @ORM\Column(name="ex_warehouse_order_sn", type="string", length=100)
*/
private $exWarehouseOrderSn;
/**
* 仓库id
* @ORM\Column(name="warehouse_id", type="integer", length=11)
*/
private $warehouseId;
/**
* 出库数量
* @ORM\Column(name="warehouse_goods_ex_num", type="integer", length=11)
*/
private $warehouseGoodsExNum;
/**
* 商品价格
* @ORM\Column(name="warehouse_goods_price", type="decimal", scale=4)
*/
private $warehouseGoodsPrice;
/**
* 商品税金
* @ORM\Column(name="warehouse_goods_tax", type="decimal", scale=4)
*/
private $warehouseGoodsTax;
/**
* 商品总金额
* @ORM\Column(name="warehouse_goods_amount", type="decimal", scale=4)
*/
private $warehouseGoodsAmount;
/**
* 商品id
* @ORM\Column(name="goods_id", type="integer", length=11)
*/
private $goodsId;
/**
* 商品名称
* @ORM\Column(name="goods_name", type="string", length=100)
*/
private $goodsName;
/**
* 商品编号
* @ORM\Column(name="goods_number", type="string", length=30)
*/
private $goodsNumber;
/**
* 商品规格
* @ORM\Column(name="goods_spec", type="string", length=100)
*/
private $goodsSpec;
/**
* 商品单位
* @ORM\Column(name="goods_unit", type="string", length=20)
*/
private $goodsUnit;
/**
* 其他入库id
* @ORM\Column(name="all_warehouse_order_id", type="integer", length=20)
*/
private $allWarehouseOrderId;
/**
* 时间
* @ORM\Column(name="add_time", type="integer", length=11)
*/
private $addTime;
/**
* 成本价
* @ORM\Column(name="cost_price", type="decimal", scale=4)
*/
private $costPrice;
/**
* @return mixed
*/
public function getAllExWarehouseOrderGoodsId()
{
return $this->allExWarehouseOrderGoodsId;
}
/**
* @param mixed $allExWarehouseOrderGoodsId
*/
public function setAllExWarehouseOrderGoodsId($allExWarehouseOrderGoodsId): void
{
$this->allExWarehouseOrderGoodsId = $allExWarehouseOrderGoodsId;
}
/**
* @return mixed
*/
public function getExWarehouseOrderId()
{
return $this->exWarehouseOrderId;
}
/**
* @param mixed $exWarehouseOrderId
*/
public function setExWarehouseOrderId($exWarehouseOrderId): void
{
$this->exWarehouseOrderId = $exWarehouseOrderId;
}
/**
* @return mixed
*/
public function getSendOrderId()
{
return $this->sendOrderId;
}
/**
* @param mixed $sendOrderId
*/
public function setSendOrderId($sendOrderId): void
{
$this->sendOrderId = $sendOrderId;
}
/**
* @return mixed
*/
public function getExWarehouseOrderSn()
{
return $this->exWarehouseOrderSn;
}
/**
* @param mixed $exWarehouseOrderSn
*/
public function setExWarehouseOrderSn($exWarehouseOrderSn): void
{
$this->exWarehouseOrderSn = $exWarehouseOrderSn;
}
/**
* @return mixed
*/
public function getWarehouseId()
{
return $this->warehouseId;
}
/**
* @param mixed $warehouseId
*/
public function setWarehouseId($warehouseId): void
{
$this->warehouseId = $warehouseId;
}
/**
* @return mixed
*/
public function getWarehouseGoodsExNum()
{
return $this->warehouseGoodsExNum;
}
/**
* @param mixed $warehouseGoodsExNum
*/
public function setWarehouseGoodsExNum($warehouseGoodsExNum): void
{
$this->warehouseGoodsExNum = $warehouseGoodsExNum;
}
/**
* @return mixed
*/
public function getWarehouseGoodsPrice()
{
return $this->warehouseGoodsPrice;
}
/**
* @param mixed $warehouseGoodsPrice
*/
public function setWarehouseGoodsPrice($warehouseGoodsPrice): void
{
$this->warehouseGoodsPrice = $warehouseGoodsPrice;
}
/**
* @return mixed
*/
public function getWarehouseGoodsTax()
{
return $this->warehouseGoodsTax;
}
/**
* @param mixed $warehouseGoodsTax
*/
public function setWarehouseGoodsTax($warehouseGoodsTax): void
{
$this->warehouseGoodsTax = $warehouseGoodsTax;
}
/**
* @return mixed
*/
public function getWarehouseGoodsAmount()
{
return $this->warehouseGoodsAmount;
}
/**
* @param mixed $warehouseGoodsAmount
*/
public function setWarehouseGoodsAmount($warehouseGoodsAmount): void
{
$this->warehouseGoodsAmount = $warehouseGoodsAmount;
}
/**
* @return mixed
*/
public function getGoodsId()
{
return $this->goodsId;
}
/**
* @param mixed $goodsId
*/
public function setGoodsId($goodsId): void
{
$this->goodsId = $goodsId;
}
/**
* @return mixed
*/
public function getGoodsName()
{
return $this->goodsName;
}
/**
* @param mixed $goodsName
*/
public function setGoodsName($goodsName): void
{
$this->goodsName = $goodsName;
}
/**
* @return mixed
*/
public function getGoodsNumber()
{
return $this->goodsNumber;
}
/**
* @param mixed $goodsNumber
*/
public function setGoodsNumber($goodsNumber): void
{
$this->goodsNumber = $goodsNumber;
}
/**
* @return mixed
*/
public function getGoodsSpec()
{
return $this->goodsSpec;
}
/**
* @param mixed $goodsSpec
*/
public function setGoodsSpec($goodsSpec): void
{
$this->goodsSpec = $goodsSpec;
}
/**
* @return mixed
*/
public function getGoodsUnit()
{
return $this->goodsUnit;
}
/**
* @param mixed $goodsUnit
*/
public function setGoodsUnit($goodsUnit): void
{
$this->goodsUnit = $goodsUnit;
}
/**
* @return mixed
*/
public function getAllWarehouseOrderId()
{
return $this->allWarehouseOrderId;
}
/**
* @param mixed $allWarehouseOrderId
*/
public function setAllWarehouseOrderId($allWarehouseOrderId): void
{
$this->allWarehouseOrderId = $allWarehouseOrderId;
}
/**
* @return mixed
*/
public function getAddTime()
{
return $this->addTime;
}
/**
* @param mixed $addTime
*/
public function setAddTime($addTime): void
{
$this->addTime = $addTime;
}
/**
* @return mixed
*/
public function getCostPrice()
{
return $this->costPrice;
}
/**
* @param mixed $costPrice
*/
public function setCostPrice($costPrice)
{
$this->costPrice = $costPrice;
}
}
\ No newline at end of file
<?php
/**
* DBERP 进销存系统
*
* ==========================================================================
* @link http://www.dberp.net/
* @copyright 北京珑大钜商科技有限公司,并保留所有权利。
* @license http://www.dberp.net/license.html License
* ==========================================================================
*
* @author 静静的风 <baron@loongdom.cn>
*
*/
namespace Store\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
use Store\Entity\AllExWarehouseOrderGoods;
class AllExWarehouseOrderGoodsRepository extends EntityRepository
{
/**
* 获取出库总数
* @param array $search
* @return \Doctrine\ORM\Query
*/
public function AllExWarehouseOrderGoodsAmount($search = [])
{
$query = $this->getEntityManager()->createQueryBuilder()
->select('SUM(e.warehouseGoodsExNum)')
->from(AllExWarehouseOrderGoods::class, 'e');
$this->querySearchData($search, $query);
$ExWarehouseAmount= $query->getQuery()->getSingleScalarResult();
return $ExWarehouseAmount ? $ExWarehouseAmount : 0;
}
/**
* 检索商品id
* @param $goodsName
* @return mixed
*/
public function findGoodsIdSearch($search = [])
{
//当定义为某个字段时,输出的是数组
$query = $this->getEntityManager()->createQueryBuilder()
->select('e.goodsId,e.goodsName')
->from(AllExWarehouseOrderGoods::class, 'e');
$this->querySearchData($search, $query);
$goodsIdResult = $query->getQuery()->getResult();
return $goodsIdResult;
}
private function querySearchData($search, QueryBuilder $queryBuilder)
{
if(isset($search['all_ex_warehouse_order_goods_id']) && !empty($search['all_ex_warehouse_order_goods_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('e.allExWarehouseOrderGoodsId', $search['all_ex_warehouse_order_goods_id']));
if(isset($search['ex_warehouse_order_id']) && !empty($search['ex_warehouse_order_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('e.exWarehouseOrderId', $search['ex_warehouse_order_id']));
if(isset($search['goods_id']) && !empty($search['goods_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('e.goodsId', $search['goods_id']));
if(isset($search['goods_name']) && !empty($search['goods_name'])) $queryBuilder->andWhere($queryBuilder->expr()->like('e.goodsName', "'%".$search['goods_name']."%'"));
if(isset($search['goods_number']) && !empty($search['goods_number'])) $queryBuilder->andWhere($queryBuilder->expr()->like('e.goodsNumber', "'%".$search['goods_number']."%'"));
if(isset($search['goods_spec']) && !empty($search['goods_spec'])) $queryBuilder->andWhere($queryBuilder->expr()->like('e.goodsSpec', "'%".$search['goods_spec']."%'"));
return $queryBuilder;
}
}
\ No newline at end of file
...@@ -20,29 +20,58 @@ use Store\Entity\AllWarehouseOrderGoods; ...@@ -20,29 +20,58 @@ use Store\Entity\AllWarehouseOrderGoods;
class AllWarehouseOrderGoodsRepository extends EntityRepository class AllWarehouseOrderGoodsRepository extends EntityRepository
{ {
/** /**
* 获取入库总数 * 检索商品id
* @param array $search * @param $goodsName
* @return \Doctrine\ORM\Query * @return mixed
*/ */
public function AllWarehouseOrderGoodsAmount($search = []) public function findWarehouseGoodsIdSearch($search = [])
{ {
//当定义为某个字段时,输出的是数组
$query = $this->getEntityManager()->createQueryBuilder() $query = $this->getEntityManager()->createQueryBuilder()
->select('SUM(o.warehouseGoodsBuyNum)') ->select('o')
->from(AllWarehouseOrderGoods::class, 'o'); ->from(AllWarehouseOrderGoods::class, 'o')
$this->querySearchData($search, $query); ->orderBy("o.addTime","ASC");
$AllWarehouseAmount= $query->getQuery()->getSingleScalarResult(); $this->querySearchData($search, $query);
return $AllWarehouseAmount ? $AllWarehouseAmount : 0; $goodsIdResult = $query->getQuery()->getResult();
return $goodsIdResult;
}
/*public function updateWarehouseGoodsStock(array $data)
{
$em = $this->getEntityManager();
$em->getConnection()->exec("update dberp_all_warehouse_order_goods set out_num=0 where all_warehouse_order_goods_id=2");
return true;
}*/
public function updateOutNum(array $data)
{
if(empty($data)) return false;
$warehouseGoods = $this->getEntityManager()->getRepository(AllWarehouseOrderGoods::class)->findOneBy(['allWarehouseOrderGoodsId' => $data['allWarehouseOrderGoodsId'], 'goodsId' => $data['goodsId']]);
if(!$warehouseGoods || $warehouseGoods->getOutNum() < $data['sendNum']) return false;
$warehouseGoods->setOutNum($warehouseGoods->getOutNum() - $data['sendNum']);
$this->getEntityManager()->flush();
$this->getEntityManager()->clear(AllWarehouseOrderGoods::class);
return true;
} }
private function querySearchData($search, QueryBuilder $queryBuilder) private function querySearchData($search, QueryBuilder $queryBuilder)
{ {
if(isset($search['all_warehouse_order_goods_id']) && !empty($search['all_warehouse_order_goods_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('o.all_warehouse_order_goods_id', $search['all_warehouse_order_goods_id'])); if(isset($search['all_warehouse_order_goods_id']) && !empty($search['all_warehouse_order_goods_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('o.allWarehouseOrderGoodsId', $search['all_warehouse_order_goods_id']));
if(isset($search['other_warehouse_order_id']) && !empty($search['other_warehouse_order_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('o.otherWarehouseOrderId', $search['other_warehouse_order_id'])); if(isset($search['other_warehouse_order_id']) && !empty($search['other_warehouse_order_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('o.otherWarehouseOrderId', $search['other_warehouse_order_id']));
if(isset($search['purchase_warehouse_order_id']) && !empty($search['purchase_warehouse_order_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('o.purchaseWarehouseOrderId', $search['purchase_warehouse_order_id']));
if(isset($search['warehouse_order_sn']) && !empty($search['warehouse_order_sn'])) $queryBuilder->andWhere($queryBuilder->expr()->in('o.warehouseOrderSn', "'".str_replace(",","','",$search['warehouse_order_sn'])."'"));
if(isset($search['warehouse_id']) && !empty($search['warehouse_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('o.warehouseId', $search['warehouse_id']));
if(isset($search['warehouseIds']) && !empty($search['warehouseIds'])) $queryBuilder->andWhere($queryBuilder->expr()->in('o.warehouseId', implode(",",$search['warehouseIds'])));
if(isset($search['goods_id']) && !empty($search['goods_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('o.goodsId', $search['goods_id'])); if(isset($search['goods_id']) && !empty($search['goods_id'])) $queryBuilder->andWhere($queryBuilder->expr()->eq('o.goodsId', $search['goods_id']));
if(isset($search['goods_name']) && !empty($search['goods_name'])) $queryBuilder->andWhere($queryBuilder->expr()->like('o.goodsName', "'%".$search['goods_name']."%'")); if(isset($search['goods_name']) && !empty($search['goods_name'])) $queryBuilder->andWhere($queryBuilder->expr()->like('o.goodsName', "'%".$search['goods_name']."%'"));
if(isset($search['goods_number']) && !empty($search['goods_number'])) $queryBuilder->andWhere($queryBuilder->expr()->like('o.goodsNumber', "'%".$search['goods_number']."%'")); if(isset($search['goods_number']) && !empty($search['goods_number'])) $queryBuilder->andWhere($queryBuilder->expr()->like('o.goodsNumber', "'%".$search['goods_number']."%'"));
if(isset($search['goods_spec']) && !empty($search['goods_spec'])) $queryBuilder->andWhere($queryBuilder->expr()->like('o.goodsSpec', "'%".$search['goods_spec']."%'")); if(isset($search['goods_spec']) && !empty($search['goods_spec'])) $queryBuilder->andWhere($queryBuilder->expr()->like('o.goodsSpec', "'%".$search['goods_spec']."%'"));
if(isset($search['out_num']) && !empty($search['out_num'])) $queryBuilder->andWhere($queryBuilder->expr()->gte('o.outNum', $search['out_num']));
return $queryBuilder; return $queryBuilder;
} }
......
<?php
/**
* DBERP 进销存系统
*
* ==========================================================================
* @link http://www.dberp.net/
* @copyright 北京珑大钜商科技有限公司,并保留所有权利。
* @license http://www.dberp.net/license.html License
* ==========================================================================
*
* @author 静静的风 <baron@loongdom.cn>
*
*/
namespace Store\Service;
use Doctrine\ORM\EntityManager;
use Sales\Entity\SalesOrderGoods;
use Sales\Entity\SalesSendOrder;
use Stock\Entity\ExWarehouseOrderGoods;
use Store\Entity\AllExWarehouseOrderGoods;
use Store\Entity\AllWarehouseOrderGoods;
use Store\Entity\Goods;
class AllExWarehouseOrderGoodsManager
{
private $entityManager;
private $allWarehouseOrderGoods;
public function __construct(
EntityManager $entityManager
)
{
$this->entityManager = $entityManager;
}
/**
* 添加其他出库商品
* @param array $data
* @param $warehouseId
* @param $orderId
* @return void
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
* @throws \Doctrine\Persistence\Mapping\MappingException
*/
public function addExWarehouseOrderGoods(array $data, $warehouseId, $orderId,$warehouseOrderSn=null)
{
foreach ($data['goodsId'] as $key => $value) {
$goodsInfo = $this->entityManager->getRepository(Goods::class)->findOneBy(['goodsId' => $value]);
$goodsExNum=$data['goodsExNum'][$key];
if($warehouseOrderSn){
$orderGoodsInfo = $this->entityManager->getRepository(AllWarehouseOrderGoods::class)->findWarehouseGoodsIdSearch(['goods_id' => $value,'warehouse_order_sn'=>$warehouseOrderSn,'warehouse_id'=>$warehouseId,'out_num'=>1]);
}else{
$orderGoodsInfo = $this->entityManager->getRepository(AllWarehouseOrderGoods::class)->findWarehouseGoodsIdSearch(['goods_id' => $value,'warehouse_id'=>$warehouseId,'out_num'=>1]);
}
foreach ($orderGoodsInfo as $k=>$v){
if ($goodsInfo && $goodsExNum>0) {
$exWarehouseGoods = new AllExWarehouseOrderGoods();
$exWarehouseGoods->setAllExWarehouseOrderGoodsId(null);
$exWarehouseGoods->setExWarehouseOrderId($orderId);
$exWarehouseGoods->setExWarehouseOrderSn($v->getwarehouseOrderSn());
$exWarehouseGoods->setWarehouseId($warehouseId);
if($goodsExNum >= $v->getoutNum()){
$exWarehouseGoods->setWarehouseGoodsExNum($v->getoutNum());
$exWarehouseGoods->setWarehouseGoodsTax(0);
$exWarehouseGoods->setWarehouseGoodsAmount($v->getoutNum() * $data['goodsPrice'][$key] + $data['goodsTax'][$key]);
$this->entityManager->getRepository(AllWarehouseOrderGoods::class)->updateWarehouseGoodsStock(['goodsId' => $value,'allWarehouseOrderGoodsId'=>$v->getallWarehouseOrderGoodsId(),'sendNum'=>$v->getoutNum()]);
$goodsExNum = $goodsExNum - $v->getoutNum();
}else{
$exWarehouseGoods->setWarehouseGoodsExNum($goodsExNum);
$exWarehouseGoods->setWarehouseGoodsTax($data['goodsTax'][$key]);
$exWarehouseGoods->setWarehouseGoodsAmount($goodsExNum * $data['goodsPrice'][$key] + $data['goodsTax'][$key]);
$this->entityManager->getRepository(AllWarehouseOrderGoods::class)->updateOutNum(['goodsId' => $value,'allWarehouseOrderGoodsId'=>$v->getallWarehouseOrderGoodsId(),'sendNum'=>$goodsExNum]);
$goodsExNum=0;
}
$exWarehouseGoods->setWarehouseGoodsPrice($data['goodsPrice'][$key]);
$exWarehouseGoods->setGoodsId($value);
$exWarehouseGoods->setGoodsName($goodsInfo->getGoodsName());
$exWarehouseGoods->setGoodsNumber($goodsInfo->getGoodsNumber());
$exWarehouseGoods->setGoodsSpec($goodsInfo->getGoodsSpec());
$exWarehouseGoods->setGoodsUnit($goodsInfo->getOneUnit()->getUnitName());
$exWarehouseGoods->setAddTime(time());
$exWarehouseGoods->setAllWarehouseOrderId($v->getallWarehouseOrderGoodsId());
$exWarehouseGoods->setCostPrice($v->getwarehouseGoodsPrice());
$this->entityManager->persist($exWarehouseGoods);
$this->entityManager->flush();
$this->entityManager->clear(AllExWarehouseOrderGoods::class);
}
}
}
}
/**
* 添加销售商品
* @param array $data
* @param $warehouseId
* @param $orderId
* @return void
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
* @throws \Doctrine\Persistence\Mapping\MappingException
*/
public function addSalesWarehouseOrderGoods(array $data, SalesSendOrder $sendOrder,$warehouseOrderSn=null)
{
foreach ($data as $value) {
$goodsInfo = $this->entityManager->getRepository(Goods::class)->findOneBy(['goodsId' => $value['goodsId']]);
$salesOrder = $this->entityManager->getRepository(SalesOrderGoods::class)->findOneBy(['goodsId' => $value['goodsId'],'salesOrderId'=>$sendOrder->getSalesOrderId()]);
$goodsExNum=$value['sendNum'];
if($warehouseOrderSn){
$orderGoodsInfo = $this->entityManager->getRepository(AllWarehouseOrderGoods::class)->findWarehouseGoodsIdSearch(['goods_id' => $value['goodsId'],'warehouse_order_sn'=>$warehouseOrderSn,'warehouse_id'=>$value['warehouseId'],'out_num'=>1]);
}else{
$orderGoodsInfo = $this->entityManager->getRepository(AllWarehouseOrderGoods::class)->findWarehouseGoodsIdSearch(['goods_id' => $value['goodsId'],'warehouse_id'=>$value['warehouseId'],'out_num'=>1]);
}
foreach ($orderGoodsInfo as $k=>$v){
if ($goodsInfo && $goodsExNum>0) {
$exWarehouseGoods = new AllExWarehouseOrderGoods();
$exWarehouseGoods->setAllExWarehouseOrderGoodsId(null);
$exWarehouseGoods->setSendOrderId($sendOrder->getSendOrderId());
$exWarehouseGoods->setExWarehouseOrderSn($v->getwarehouseOrderSn());
$exWarehouseGoods->setWarehouseId($value['warehouseId']);
if($goodsExNum >= $v->getoutNum()){
$exWarehouseGoods->setWarehouseGoodsExNum($v->getoutNum());
$exWarehouseGoods->setWarehouseGoodsTax(0);
$exWarehouseGoods->setWarehouseGoodsAmount($v->getoutNum() * $salesOrder->getsalesGoodsPrice() + $salesOrder->getsalesGoodsTax());
$this->entityManager->getRepository(AllWarehouseOrderGoods::class)->updateOutNum(['goodsId' => $value,'allWarehouseOrderGoodsId'=>$v->getallWarehouseOrderGoodsId(),'sendNum'=>$v->getoutNum()]);
$goodsExNum = $goodsExNum - $v->getoutNum();
}else{
$exWarehouseGoods->setWarehouseGoodsExNum($goodsExNum);
$exWarehouseGoods->setWarehouseGoodsTax($salesOrder->getsalesGoodsTax());
$exWarehouseGoods->setWarehouseGoodsAmount($goodsExNum * $salesOrder->getsalesGoodsPrice() + $salesOrder->getsalesGoodsTax());
$this->entityManager->getRepository(AllWarehouseOrderGoods::class)->updateOutNum(['goodsId' => $value,'allWarehouseOrderGoodsId'=>$v->getallWarehouseOrderGoodsId(),'sendNum'=>$goodsExNum]);
$goodsExNum=0;
}
$exWarehouseGoods->setWarehouseGoodsPrice($salesOrder->getsalesGoodsPrice());
$exWarehouseGoods->setGoodsId($value);
$exWarehouseGoods->setGoodsName($goodsInfo->getGoodsName());
$exWarehouseGoods->setGoodsNumber($goodsInfo->getGoodsNumber());
$exWarehouseGoods->setGoodsSpec($goodsInfo->getGoodsSpec());
$exWarehouseGoods->setGoodsUnit($goodsInfo->getOneUnit()->getUnitName());
$exWarehouseGoods->setAddTime(time());
$exWarehouseGoods->setAllWarehouseOrderId($v->getallWarehouseOrderGoodsId());
$exWarehouseGoods->setCostPrice($v->getwarehouseGoodsPrice());
$this->entityManager->persist($exWarehouseGoods);
$this->entityManager->flush();
$this->entityManager->clear(AllExWarehouseOrderGoods::class);
}
}
}
}
}
\ No newline at end of file
<?php
/**
* DBERP 进销存系统
*
* ==========================================================================
* @link http://www.dberp.net/
* @copyright 北京珑大钜商科技有限公司,并保留所有权利。
* @license http://www.dberp.net/license.html License
* ==========================================================================
*
* @author 静静的风 <baron@loongdom.cn>
*
*/
namespace Store\Service\Factory;
use Interop\Container\ContainerInterface;
use Laminas\ServiceManager\Factory\FactoryInterface;
use Store\Service\AllExWarehouseOrderGoodsManager;
class AllExWarehouseOrderGoodsManagerFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null): AllExWarehouseOrderGoodsManager
{
$entityManager = $container->get('doctrine.entitymanager.orm_default');
return new AllExWarehouseOrderGoodsManager($entityManager);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment