store_id)){ $this->store_id = get_store_id(); } } public function search () { try { $query = ErpPurchaseinOrder::find()->alias('epo')->where(['epo.is_delete' => 0, 'epo.store_id' => $this->store_id]); $query->leftJoin(['es' => ErpSupplier::tableName()], 'es.id = epo.supplier_id'); if (!empty($this->inventory_id)) { $query->andWhere(['epo.id' => ErpPurchasein::find()->select('purchase_order_id')->where(['inventory_id' => $this->inventory_id])]); } if (!empty($this->operator_id)) { $query->andWhere(['epo.operator_id' => $this->operator_id]); } if (!empty($this->operator)) { $query->andWhere(['like', 'epo.operator', $this->operator]); } if (!empty($this->order_no)) { $query->andWhere(['like', 'epo.order_no', $this->order_no]); } if (!empty($this->goods_name)) { $query1 = ErpPurchasein::find()->alias('ep') ->leftJoin(['ei' => ErpInventory::tableName()], 'ei.id = ep.inventory_id') ->leftJoin(['g' => Goods::tableName()], 'ei.goods_id = g.id') ->where(['like', 'g.name', $this->goods_name]) ->groupBy('ep.purchase_order_id') ->select('ep.purchase_order_id'); $query->andWhere(['epo.id' => $query1]); } if (!empty($this->goods_id)) { $query2 = ErpPurchasein::find()->alias('ep') ->leftJoin(['ei' => ErpInventory::tableName()], 'ei.id = ep.inventory_id') ->where(['ei.goods_id' => $this->goods_id]) ->groupBy('ep.purchase_order_id') ->select('ep.purchase_order_id'); $query->andWhere(['epo.id' => $query2]); } if (!empty($this->supplier_name)) { $query->andWhere(['epo.supplier_id' => ErpSupplier::find()->select('id')->where(['like', 'name', $this->supplier_name])]); } if (!empty($this->supplier_id)) { $query->andWhere(['epo.supplier_id' => $this->supplier_id]); } if ($this->status > -1) { $query->andWhere(['epo.status' => $this->status]); } if ($this->ids) { $query->andWhere(['epo.id' => $this->ids]); } $query->orderBy('epo.id DESC'); $query->select('epo.*, es.name supplier_name'); $pagination = pagination_make($query); foreach ($pagination['list'] as &$item) { $item['created_at'] = date("Y-m-d H:i:s", $item['created_at']); } return [ 'code' => 0, 'msg' => 'success', 'data' => $pagination, // 'q' => $query->createCommand()->getRawSql(), ]; } catch (\Exception $e) { \Yii::error($e); return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function info () { try { $epo = ErpPurchaseinOrder::find()->where(['id' => $this->id, 'store_id' => $this->store_id])->one(); $epo['created_at'] = date("Y-m-d H:i:s", $epo['created_at']); $supplier_name = ErpSupplier::findOne($epo['supplier_id'])['name']; $ep = ErpPurchasein::find()->alias('ep') ->leftJoin(['ei' => ErpInventory::tableName()], 'ei.id = ep.inventory_id') ->leftJoin(['g' => Goods::tableName()], 'ei.goods_id = g.id') ->where(['ep.purchase_order_id' => $this->id]) ->select('ep.*, g.cover_pic, g.name goods_name, ei.attr_info') ->asArray()->all(); $totalPrice = 0; foreach ($ep as &$item) { $attr_info = json_decode($item['attr_info'], true); $item['attr_names'] = implode(',', array_column($attr_info['attr_list'], 'attr_name')); if($attr_info['pic']){ $item['cover_pic'] = $attr_info['pic']; } $item['goods_price'] = $attr_info['price']; $totalPrice += $item['goods_price'] * $item['num']; } $store = Store::findOne($this->store_id); $district = implode('', District::find()->where(['id' => [$store['province_id'], $store['city_id'], $store['district_id']]])->select('name')->column()); return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'supplier_name' => $supplier_name, 'epo' => $epo, 'ep' => $ep, 'totalPrice' => $totalPrice, 'store' => [ 'name' => $store['name'], 'contact_tel' => $store['contact_tel'], 'address' => $store['address'], 'district' => $district, ] ], // 'q' => $query->createCommand()->getRawSql(), ]; } catch (\Exception $e) { \Yii::error($e); return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function searchPurchase () { try { $query = ErpPurchasein::find()->alias('ep') ->leftJoin(['epo' => ErpPurchaseinOrder::tableName()], 'ep.purchase_order_id = epo.id') ->leftJoin(['ei' => ErpInventory::tableName()], 'ei.id = ep.inventory_id') ->leftJoin(['g' => Goods::tableName()], 'ei.goods_id = g.id') ->where(['epo.is_delete' => 0, 'epo.store_id' => $this->store_id]); $query->leftJoin(['es' => ErpSupplier::tableName()], 'es.id = epo.supplier_id'); if ($this->ids) { if(!is_array($this->ids)){ $this->ids = explode(',', $this->ids); } $query->andWhere(['epo.id' => $this->ids]); } $query->orderBy('epo.id DESC'); $query->select('ep.id, ep.num, es.name supplier_name, epo.order_no, epo.created_at, g.cover_pic, g.name goods_name, ei.attr_info'); $pagination = pagination_make($query); foreach ($pagination['list'] as &$item) { $item['created_at'] = date("Y-m-d H:i:s", $item['created_at']); $attr_info = json_decode($item['attr_info'], true); $item['attr_names'] = implode(',', array_column($attr_info['attr_list'], 'attr_name')); $item['goods_price'] = $attr_info['price']; } if($this->export){ return $this->export($pagination['list']); } return [ 'code' => 0, 'msg' => 'success', 'data' => $pagination, // 'q' => $query->createCommand()->getRawSql(), ]; } catch (\Exception $e) { \Yii::error($e); return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } private function export($list) { $rows = [[ 'ID', '入库单号', '供货商', '商品', '规格', '数量', '单价', '时间', ]]; foreach($list as $item){ $r = [ $item['id'], $item['order_no'], $item['supplier_name'], $item['goods_name'], $item['attr_names'], $item['num'], $item['goods_price'], $item['created_at'], ]; $rows[] = $r; } $writer = \Spatie\SimpleExcel\SimpleExcelWriter::streamDownload(time() . '.xlsx')->noHeaderRow() ->addRows($rows)->toBrowser(); } public function save () { $t = \Yii::$app->db->beginTransaction(); try { if(!InventoryForm::isOpen($this->store_id)){ throw new \Exception('操作失败!进销存功能未开启'); } $model = new ErpPurchaseinOrder(); $model->operator = get_admin()->name; $model->operator_id = get_admin()->id; $model->store_id = $this->store_id; $model->order_no = OrderNo::getOrderNo(OrderNo::ERP_PURCHASE_IN); $model->store_id = $this->store_id; $model->supplier_id = $this->supplier_id; $model->remark = (string)$this->remark; $model->num = count($this->purchase); if (!$model->save()) { \Yii::error([__METHOD__, $model->attributes]); throw new \Exception(array_shift($model->getFirstErrors())); } ErpPurchasein::saveList($model, $this->purchase); $t->commit(); return [ 'code' => 0, 'msg' => '操作成功!' ]; } catch (\Exception $e) { \Yii::error($e); $t->rollBack(); return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function statusPrint () { $t = \Yii::$app->db->beginTransaction(); try { $model = ErpPurchaseinOrder::findOne($this->id); $model->status = 1; if (!$model->save()) { \Yii::error([__METHOD__, $model->attributes]); throw new \Exception(array_shift($model->getFirstErrors())); } ErpPurchasein::saveList($model->id, $this->purchase); $t->commit(); return [ 'code' => 0, 'msg' => '操作成功!' ]; } catch (\Exception $e) { \Yii::error($e); $t->rollBack(); return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }