store_id)){ $this->store_id = get_store_id(); } } public function search () { try { $query = AgentFrontErpPurchaseinOrder::find()->alias('epo')->where(['epo.is_delete' => 0, 'epo.front_agent_admin_id' => $this->front_agent_admin_id]); $query->leftJoin(['es' => Supplier::tableName()], 'es.id = epo.supplier_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 = AgentFrontErpPurchasein::find()->alias('ep') ->leftJoin(['ei' => AgentFrontErpInventory::tableName()], 'ei.id = ep.inventory_id') ->leftJoin(['g' => AgentFrontErpCloudGoods::tableName()], 'ei.goods_id = g.cloud_goods_id') ->where(['like', 'g.goods_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 = AgentFrontErpPurchasein::find()->alias('ep') ->leftJoin(['ei' => AgentFrontErpInventory::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(['like', 'es.supplier_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 = AgentFrontErpPurchaseinOrder::find()->where(['id' => $this->id, 'front_agent_admin_id' => $this->front_agent_admin_id])->one(); $epo['created_at'] = date("Y-m-d H:i:s", $epo['created_at']); $supplier_name = Supplier::findOne($epo['supplier_id'])['supplier_name']; $ep = AgentFrontErpPurchasein::find()->alias('ep') ->leftJoin(['ei' => AgentFrontErpInventory::tableName()], 'ei.id = ep.inventory_id') ->leftJoin(['g' => AgentFrontErpCloudGoods::tableName()], 'ei.goods_id = g.cloud_goods_id') ->where(['ep.purchase_order_id' => $this->id]) ->select('ep.id, ep.num, g.cover_pic, g.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')); $item['goods_price'] = $attr_info['price']; $totalPrice += $item['goods_price'] * $item['num']; } $admin = Admin::findOne($this->front_agent_admin_id); $district = implode('', District::find()->where(['id' => [$admin->province_id ?? 0, $admin->city_id ?? 0, $admin->district_id ?? 0]])->select('name')->column()); return [ 'code' => 0, 'msg' => 'success', 'data' => [ 'supplier_name' => $supplier_name, 'epo' => $epo, 'ep' => $ep, 'totalPrice' => $totalPrice, 'store' => [ 'name' => $admin->name, 'contact_tel' => $admin->mobile, 'address' => $admin->address, 'district' => $district, ] ], // 'q' => $query->createCommand()->getRawSql(), ]; } catch (\Exception $e) { \Yii::error($e); return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } public function searchPurchase () { try { $query = AgentFrontErpPurchasein::find()->alias('ep') ->leftJoin(['epo' => AgentFrontErpPurchaseinOrder::tableName()], 'ep.purchase_order_id = epo.id') ->leftJoin(['ei' => AgentFrontErpInventory::tableName()], 'ei.id = ep.inventory_id') ->leftJoin(['g' => AgentFrontErpCloudGoods::tableName()], 'ei.goods_id = g.cloud_goods_id') ->where(['epo.is_delete' => 0, 'epo.front_agent_admin_id' => $this->front_agent_admin_id]); $query->leftJoin(['es' => Supplier::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.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 { $supplier = Supplier::findOne(['id' => $this->supplier_id, 'is_delete' => 0]); if (!$supplier) { throw new \Exception('供货商不存在'); } if (!in_array($supplier->cloud_supplier_id, AgentFrontBind::getAgentFrontBindSupplierId($this->front_agent_admin_id) ?? [])) { throw new \Exception('当前供货商商品未与仓库关联'); } $model = new AgentFrontErpPurchaseinOrder(); $model->operator = get_admin()->name; $model->operator_id = get_admin()->id; $model->front_agent_admin_id = $this->front_agent_admin_id; $model->order_no = OrderNo::getOrderNo(OrderNo::ERP_PURCHASE_IN); $model->supplier_id = $this->supplier_id; $model->num = count($this->purchase); if (!$model->save()) { \Yii::error([__METHOD__, $model->attributes]); throw new \Exception(array_shift($model->getFirstErrors())); } AgentFrontErpPurchasein::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 = AgentFrontErpPurchaseinOrder::findOne($this->id); $model->status = 1; if (!$model->save()) { \Yii::error([__METHOD__, $model->attributes]); throw new \Exception(array_shift($model->getFirstErrors())); } AgentFrontErpPurchasein::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() ]; } } }