Beispiel #1
1
 protected final function checkFactoryCodeAll($rows)
 {
     $template = explode(",", DBC("goods.unique.template"));
     //预检测,判断factory_code_all为空或者元素数量和模板不对等
     foreach ($rows as $row) {
         $fca = explode(DBC("goods.unique.separator"), $row["factory_code_all"]);
         if (!$row["factory_code_all"] or count($fca) !== count($template)) {
             return false;
         }
         $factoryCode[$fca[0]] = $fca[0];
         for ($i = 1; $i < count($template); $i++) {
             $modelIds[$template[$i]][] = $fca[$i];
         }
     }
     //        print_r($modelIds);exit;
     //再次检测,factory_code不存在于goods表中
     $model = D("Goods");
     $map = array("factory_code" => array("IN", $factoryCode));
     $count = $model->where($map)->count();
     if ($count < count($factoryCode)) {
         return false;
     }
     //或者modelDataId的字段名和模板不能对应起来
     //        $model = D("DataModelFields");
     //        $modelFields = $model->getFieldsByAlias("product");
     return true;
 }
 public function export()
 {
     $params = json_decode(base64_decode($_GET["params"]), true);
     $model = D("StockProductListView");
     $map = array();
     if ($_GET["stock"]) {
         $map["stock_id"] = array("IN", implode(",", $params["stock"]));
     }
     if ($params["warningonly"] > 0) {
         $map["_string"] = '((StockProductList.store_min>0 AND StockProductList.store_min>=num) OR (StockProductList.store_max>0 AND StockProductList.store_max<=num))';
     }
     if ($_GET["category"]) {
         $map["goods_category_id"] = array("IN", implode(",", $params["category"]));
     }
     $data = $model->where($map)->order("stock_id ASC")->select();
     $configedFields = DBC("store.stockProductList.exportFields");
     if ($configedFields) {
         $this->exportFields = explode(",", $configedFields);
     } else {
         $params = array("fields" => $this->exportFields, "dataModelAlias" => "product", "after" => "goods_name");
         tag("bind_dataModel_structure", $params);
         $this->exportFields = $params["fields"];
     }
     $this->doExport(sprintf("export_kcqd_%s", date("YmdHis", CTS)), $data);
 }
 public function read()
 {
     if (!$_GET["includeRows"] or $_GET['workflow']) {
         return parent::read();
     }
     $formData = parent::read(true);
     $formData["start_time"] = $formData["start_time"] * 1000;
     $formData["end_time"] = $formData["end_time"] * 1000;
     $rowModel = D("ProducePlanDetailView");
     $rows = $rowModel->where("ProducePlanDetail.plan_id=" . $formData["id"])->select();
     //        echo $rowModel->getLastSql();exit;
     $modelIds = array();
     $rowData = array();
     foreach ($rows as $v) {
         $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
         //根据factory_code_all factory_code - standard - version
         $factory_code = array_shift($tmp);
         $modelIds = array_merge($modelIds, $tmp);
         $v["modelIds"] = $tmp;
         $v["stock"] = $v["stock_id"];
         $v["stock_label"] = $v["stock_name"];
         $v["goods_id"] = sprintf("%s_%s_%s", $factory_code, $v["goods_id"], $v["goods_category_id"]);
         // factory_code, id, catid
         $v["goods_id_label"] = sprintf("%s", $v["goods_name"]);
         $rowData[$v["id"]] = $v;
     }
     //        array_flip(array_flip($modelIds));
     $params = array($rowData, $modelIds);
     tag("assign_dataModel_data", $params);
     $formData["rows"] = reIndex($params[0]);
     $this->response($formData);
 }
 public function read()
 {
     if (!$_GET["includeRows"] or $_GET['workflow']) {
         return parent::read();
     }
     //        $this->readModel = "PurchaseView";
     //        $formData = parent::read(true);
     $formData = D("PurchaseView")->find($_GET['id']);
     $formData["inputTime"] = $formData["dateline"] * 1000;
     //        $formData["total_amount"] = $formData["total_price"];
     //        $formData["total_amount_real"] = $formData["total_price_real"];
     //        $formData["total_num"] = $formData["quantity"];
     $rowModel = D("PurchaseDetailView");
     $rows = $rowModel->where("PurchaseDetail.purchase_id=" . $formData["id"])->select();
     //        echo $rowModel->getLastSql();exit;
     $modelIds = array();
     $rowData = array();
     foreach ($rows as $v) {
         $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
         //根据factory_code_all factory_code - standard - version
         $factory_code = array_shift($tmp);
         $modelIds = array_merge($modelIds, $tmp);
         $v["modelIds"] = $tmp;
         $v["goods_id"] = sprintf("%s_%s_%s", $factory_code, $v["goods_id"], $v["goods_category_id"]);
         // factory_code, id, catid
         $v["goods_id_label"] = sprintf("%s", $v["goods_name"]);
         //             $v["amount"] = $v["price"];
         $rowData[$v["id"]] = $v;
     }
     //        array_flip(array_flip($modelIds));
     $formData["customer_id_label"] = $formData["customer"];
     $params = array($rowData, $modelIds);
     tag("assign_dataModel_data", $params);
     $formData["rows"] = reIndex($params[0]);
     /*
      * 相关单据
      * **/
     $relateItem = array();
     $id = abs(intval($_GET["id"]));
     if (isAppLoaded("store")) {
         $tmp = D("Stockin")->toRelatedItem("Purchase", $id);
         if ($tmp) {
             $relateItem = array_merge($relateItem, $tmp);
         }
     }
     if (isAppLoaded("finance")) {
         $tmp = D("FinancePayPlan")->toRelatedItem("Purchase", $id);
         if ($tmp) {
             $relateItem = array_merge($relateItem, $tmp);
         }
     }
     if ($formData["source_model"] == "ProducePlan" && $formData["source_id"] && isAppLoaded("produce")) {
         $tmp = D("ProducePlan")->getRelatedItem($formData["source_id"]);
         if ($tmp) {
             $relateItem[] = $tmp;
         }
     }
     $formData["relatedItems"] = $relateItem;
     $this->response($formData);
 }
Beispiel #5
0
 public function convert_to_stock_in($id)
 {
     if (!AppService::is_app_active('storage')) {
         $this->error = sprintf(__('common.Need %s App Active'), 'storage');
         return false;
     }
     $meta_fields = ['quantity', 'subject', 'bill_no', 'remark'];
     $meta = [];
     $raw_main_data = $this->where(['id' => $id])->find();
     foreach ($raw_main_data as $field => $value) {
         if (in_array($field, $meta_fields)) {
             $meta[$field] = $value;
         }
     }
     $meta['subject'] = __('purchase.Purchase stock in') . ' ' . $meta['subject'];
     $meta['source_model'] = 'purchase.purchase';
     $meta['source_id'] = $id;
     $meta['workflow_id'] = DBC('purchase_stock_in_workflow');
     $row_model = D('Purchase/PurchaseDetail');
     $raw_rows_data = $row_model->where(['purchase_id' => $id])->select();
     $stock_in_service = D('Storage/StockIn');
     $stock_in_id = $stock_in_service->add_bill($meta, $raw_rows_data);
     if (!$stock_in_id) {
         $this->error = $stock_in_service->getError();
         return false;
     }
     return $stock_in_id;
 }
Beispiel #6
0
 public function index()
 {
     if (!is_file(APP_PATH . "/Data/install.lock")) {
         //            $this->display("install");
         return;
     }
     $this->assign("isDebug", APP_DEBUG ? 'true' : 'false');
     $this->assign("APP_DEBUG", APP_DEBUG);
     $this->assign("siteTitle", DBC("site.title"));
     $loadedApps = F("loadedApp");
     $loadedApps = array_merge($loadedApps, getPrimaryApps(true));
     unset($loadedApps["install"]);
     $this->assign("loadedAppsStr", json_encode($loadedApps));
     //静态资源
     import("@.ORG.staticRuntime");
     $runtime = new FrontEndRuntime($loadedApps);
     if (!APP_DEBUG) {
         $javascripts = array(U('FrontendRuntime/read?compileJS=compile.js'));
     } else {
         $javascripts = $runtime->getJavascripts();
     }
     $javascripts[] = U('FrontendRuntime/read?js=common/base/app.js');
     $this->assign("javascripts", $javascripts);
     if ($this->isLogin()) {
         $this->assign("APP_PATH", str_replace("index.php", "", __APP__));
         $this->assign("userInfo", json_encode($this->user));
         $this->display("app");
     } else {
         $this->display("login");
     }
 }
 public function read()
 {
     $pid = abs(intval($_GET["id"]));
     $model = D("ProductTpl");
     $data = $model->find($pid);
     $rowsModel = D("ProductTplDetailView");
     $rows = $rowsModel->where("ProductTplDetail.tpl_id=" . $pid)->select();
     $modelIds = array();
     foreach ($rows as $k => $v) {
         $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
         //根据factory_code_all factory_code - standard - version
         $factory_code = array_shift($tmp);
         $rows[$k]["stock"] = $v["stock_id"];
         //            $rows[$k]["goods_id"] = $v["factory_code_all"];
         $modelIds = array_merge($modelIds, $tmp);
         $rows[$k]["modelIds"] = $tmp;
     }
     //        echo $rowsModel->getLastSql();
     //        print_r($rows);
     $params = array($rows, $modelIds);
     tag("assign_dataModel_data", $params);
     $data["rows"] = $params[0];
     //        echo $rowsModel->getLastSql();exit;
     //        print_r($data);exit;
     $this->response($data);
 }
Beispiel #8
0
 public function get_quantity_by_product($row_data)
 {
     $quantity_balance = 0;
     if ($row_data['product_unique_id']) {
         $product_unique_id = $row_data['product_unique_id'];
     } else {
         if (AppService::is_app_active('productAttribute')) {
             $attribute_fields = D('ProductAttribute/ProductAttribute')->get_attribute_fields();
             $product_unique_id = generate_product_unique_id($row_data, $attribute_fields);
         } else {
             if ($row_data['product_id']) {
                 $product_unique_id = $row_data['product_id'];
             }
         }
     }
     if (!$product_unique_id) {
         return $quantity_balance;
     }
     $map = ['product_unique_id' => $product_unique_id];
     // 指定仓库
     if ($row_data['storage_id']) {
         $map['storage_id'] = $row_data['storage_id'];
     }
     $raw_data = $this->where($map)->select();
     foreach ($raw_data as $v) {
         $quantity_balance += $v['balance'];
     }
     return round((string) $quantity_balance, DBC('decimal_scale'));
 }
 public function select($options = array())
 {
     $data = parent::select($options);
     if (!$data) {
         return $data;
     }
     $goodsIds = array();
     foreach ($data as $k => $v) {
         $goodsIds[$v["goods_id"]] = $v["goods_id"];
         $goodsIds[$v["detail_goods_id"]] = $v["detail_goods_id"];
     }
     $model = D("Goods");
     $tmp = $model->where(array("id" => array("IN", implode(",", $goodsIds))))->select();
     foreach ($tmp as $g) {
         $goods[$g["id"]] = $g;
     }
     foreach ($data as $k => $v) {
         $data[$k]["goods_id_label"] = $goods[$v["goods_id"]]["name"];
         list($factory_code, ) = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
         $data[$k]["goods_id"] = sprintf("%s_%s_%s", $factory_code, $v["goods_id"], $goods[$v["goods_id"]]["goods_category_id"]);
         //            $data[$k]["goods"] = $goods[$v["detail_goods_id"]];
     }
     return $data;
     //        print_r($codes);
     print_r($data);
 }
Beispiel #10
0
 public function read()
 {
     if (!$_GET["includeRows"] or $_GET['workflow']) {
         return parent::read();
     }
     $formData = parent::read(true);
     $formData["inputTime"] = $formData["dateline"] * 1000;
     $rowModel = D("ReturnsDetailView");
     $rows = $rowModel->where("ReturnsDetail.returns_id=" . $formData["id"])->select();
     //        echo $rowModel->getLastSql();exit;
     $modelIds = array();
     $rowData = array();
     foreach ($rows as $v) {
         $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
         //根据factory_code_all factory_code - standard - version
         $factory_code = array_shift($tmp);
         $modelIds = array_merge($modelIds, $tmp);
         $v["modelIds"] = $tmp;
         $v["goods_id"] = sprintf("%s_%s_%s", $factory_code, $v["goods_id"], $v["goods_category_id"]);
         // factory_code, id, catid
         $v["goods_id_label"] = sprintf("%s", $v["goods_name"]);
         $v["unit_price"] = $v["price"];
         $v["amount"] = $v["num"];
         $rowData[$v["id"]] = $v;
     }
     //        array_flip(array_flip($modelIds));
     $formData["customer_id_label"] = $formData["customer"];
     $dataModel = D("DataModelDataView");
     $rowData = $dataModel->assignModelData($rowData, $modelIds);
     $formData["rows"] = reIndex($rowData);
     $this->response($formData);
 }
 public function getStockoutBill($id)
 {
     $data = $this->find($id);
     if (!$data) {
         return false;
     }
     if ($data["source_model"]) {
         $sourceModel = D($data["source_model"] . "View");
         $data["source"] = $sourceModel->find($data["source_id"]);
         if ($_GET["includeRelated"]) {
             try {
                 $model = D($data["source_model"]);
                 $related = $model->getRelatedItem($data["source_id"]);
                 $data["relatedItems"][] = $related;
             } catch (Exception $e) {
             }
         }
         if ($_GET["includeSourceRows"]) {
             $sourceDetailModel = D($data["source_model"] . "Detail");
             $foreignKey = $sourceDetailModel->foreignKey ? $sourceDetailModel->foreignKey : lcfirst($data["source_model"]) . "_id";
             $map[$foreignKey] = $data["source_id"];
             $tmp = $sourceDetailModel->where($map)->select();
             foreach ($tmp as $t) {
                 $data["source_detail"][$t["factory_code_all"]] = $t;
             }
         }
     }
     $detailModel = D("StockoutDetailView");
     $data["rows"] = $detailModel->where("stockout_id=" . $data["id"])->select();
     /**
      * 每列信息处理
      */
     $modelIds = array();
     foreach ($data["rows"] as $k => $v) {
         $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
         //根据factory_code_all factory_code - standard - version
         $factory_code = array_shift($tmp);
         $modelIds = array_merge($modelIds, $tmp);
         $v["modelIds"] = $tmp;
         $v["stock"] = $v["stock_id"];
         $v["stock_label"] = $v["stock_name"];
         $v["goods_id"] = sprintf("%s_%s_%s", $factory_code, $v["goods_id"], $v["goods_category_id"]);
         // factory_code, id, catid
         $v["goods_id_label"] = sprintf("%s", $v["goods_name"]);
         $v["total_num"] = $v["num"];
         $v["num"] = $v["num"] - $v["outed"];
         $data["rows"][$k] = $v;
         $fca[] = $v["factory_code_all"];
     }
     $params = array($data["rows"], $modelIds);
     tag("assign_dataModel_data", $params);
     $data["rows"] = reIndex($params[0]);
     //
     //        $dataModel = D("DataModelDataView");
     //        $data["rows"] = $dataModel->assignModelData($data["rows"], $modelIds);
     return $data;
 }
 /**
  * @override
  *
  */
 public function select($options = array())
 {
     $data = parent::select($options);
     //        echo $this->getLastSql();exit;
     //        print_r($data);exit;
     $theDataModel = D("DataModel")->getByAlias("product");
     foreach ($data as $k => $v) {
         $data[$k]["modelIndex"] = sprintf("%d-%d", $v["goods_category_id"], $theDataModel["id"]);
         $data[$k]["goodsCode"] = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
     }
     $params = array($data, null, false, true);
     tag("assign_dataModel_data", $params);
     $data = $params[0];
     return $data;
 }
 public function read()
 {
     $version = $this->getVersion($_GET["id"]);
     //检测是不是相邻版本
     if (!$this->isAdjoiningVersion(DBC("system.version"), $version["version"])) {
         $this->error("you only can upgrade current version to the adjoining version.");
         return;
     }
     //文件路径为HTTP绝对地址
     if (strStartWith($version["file"], "http://") or strStartWith($version["file"], "https://")) {
         $remoteUri = $version["file"];
     } else {
         $remoteUri = file_get_contents($this->server . "getDownload/id/" . $version["id"]);
     }
     $localPathFull = $this->getLocalPath($version["file"]);
     $tmp = explode("/", $localPathFull);
     $localName = array_pop($tmp);
     $localPath = implode("/", $tmp);
     import("@.ORG.CurlAxel");
     $axel = new CurlAxel();
     $axel->setUrl($remoteUri);
     $size = $axel->getFileSize($remoteUri);
     $axel->setProgressCallback(false);
     $axel->setTempDir(ENTRY_PATH . "/Runtime/Temp");
     $axel->setDownloadDir($localPath);
     $axel->setFilename($localName);
     $axel->setBufferSize(32 * 1024);
     $axel->activeLog(true);
     $axel->download();
     $maxTry = 30;
     $sleep = 1;
     $try = 0;
     $downloaded = false;
     do {
         $try++;
         sleep($sleep);
         clearstatcache();
         //下载成功
         if (is_file($localPath . $localName) and filesize($localPath . $localName) == $size) {
             $downloaded = true;
             break;
         }
     } while ($try <= $maxTry);
     if (!$downloaded) {
         $this->error("download_failed");
         return;
     }
 }
Beispiel #14
0
 public function read()
 {
     if (!$_GET["includeRows"] or $_GET['workflow']) {
         return parent::read();
     }
     $this->readModel = "OrdersView";
     $formData = parent::read(true);
     $formData["inputTime"] = $formData["dateline"] * 1000;
     $rowModel = D("OrdersDetailView");
     $rows = $rowModel->where("OrdersDetail.order_id=" . $formData["id"])->select();
     $modelIds = array();
     $rowData = array();
     foreach ($rows as $v) {
         $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
         //根据factory_code_all factory_code - standard - version
         $factory_code = array_shift($tmp);
         $modelIds = array_merge($modelIds, $tmp);
         $v["modelIds"] = $tmp;
         $v["goods_id"] = sprintf("%s_%s_%s", $factory_code, $v["goods_id"], $v["goods_category_id"]);
         // factory_code, id, catid
         $v["goods_id_label"] = sprintf("%s", $v["goods_name"]);
         $rowData[$v["id"]] = $v;
     }
     $formData["customer_id_label"] = $formData["customer"];
     $dataModel = D("DataModelDataView");
     $rowData = $dataModel->assignModelData($rowData, $modelIds);
     $formData["rows"] = reIndex($rowData);
     if ($formData["tax_amount"]) {
         $formData["includeTax"] = true;
     }
     /*
      * 相关单据
      * **/
     $relateItem = array();
     $id = abs(intval($_GET["id"]));
     if (isAppLoaded("purchase")) {
         $relateItem = array_merge($relateItem, (array) D("Purchase")->toRelatedItem("Orders", $id));
     }
     if (isAppLoaded("finance")) {
         $relateItem = array_merge($relateItem, (array) D("FinanceReceivePlan")->toRelatedItem("Orders", $id));
     }
     if (isAppLoaded("produce")) {
         $relateItem = array_merge($relateItem, (array) D("ProducePlan")->toRelatedItem("Orders", $id));
     }
     $formData["relatedItems"] = $relateItem;
     $this->response($formData);
 }
 public function read()
 {
     if ($_GET["checkIsMaked"]) {
         return $this->checkIsMaked();
     }
     $model = D("ProduceBomsView");
     $rows = $model->where("ProduceBoms.plan_id=" . $_GET["id"])->select();
     $modelIds = array();
     foreach ($rows as $k => $v) {
         $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
         $factory_code = array_shift($tmp);
         $modelIds = array_merge($modelIds, $tmp);
         $rows[$k]["modelIds"] = $tmp;
     }
     $params = array($rows, $modelIds);
     tag("assign_dataModel_data", $params);
     $data = array("rows" => $params[0]);
     $this->response($data);
 }
 protected function _filter(&$map)
 {
     if ($_GET["modelId"]) {
         $map["DataModelData.model_id"] = abs(intval($_GET["modelId"]));
     }
     if ($_GET['fieldAlias']) {
         $map["DataModelFields.field_name"] = $_GET['fieldAlias'];
     }
     if ($_GET["typeahead"]) {
         $map["DataModelData.data|DataModelData.pinyin"] = array("LIKE", "%{$_GET["typeahead"]}%");
     }
     if ($_GET["source_id"]) {
         $map["DataModelData.source_id"] = abs(intval($_GET["source_id"]));
     }
     //根据分类查询对应的模型
     if ($_GET["goods_id"]) {
         if (strpos($_GET["goods_id"], "_") !== false) {
             list($factory_code, $id, $catid) = explode("_", $_GET["goods_id"]);
             $model = D("GoodsCategory");
             $category = $model->find($catid);
             if ($category) {
                 $map["DataModel.alias"] = "product";
                 if (DBC("dataModel.showOnlyBind")) {
                     $map["DataModelData.source_id"] = $catid;
                 }
             }
         } else {
             $model = D("GoodsCatView");
             $category = $model->find($_GET["goods_id"]);
             if ($category) {
                 $map["DataModel.alias"] = "product";
                 if (DBC("dataModel.showOnlyBind")) {
                     $map["DataModelData.source_id"] = $category["goods_category_id"];
                 }
             }
         }
     }
     if ($_GET["cat_id"]) {
         $map["DataModel.alias"] = "product";
     }
     $map["DataModelData.deleted"] = 0;
 }
Beispiel #17
0
function checkAppRequirements($requirements)
{
    $loadedApps = F("loadedApp");
    $lost = array();
    if (!$requirements) {
        return true;
    }
    foreach ($requirements as $app => $cond) {
        list($compare, $version) = explode(" ", $cond);
        if (!array_key_exists($app, $loadedApps) && $app !== "ones") {
            $lost[] = $app;
            continue;
        }
        $currentVersion = $loadedApps[$app];
        if ($app == "ones") {
            $currentVersion = DBC("system.version");
        }
        //当前为判断系统版本
        if ($app === "ones") {
            if (!version_compare($currentVersion, $version, $compare)) {
                if ($app === "ones") {
                    return array("ones" => $compare . $version);
                } else {
                    $lost[] = sprintf("%s %s v%s needed.", $app, $compare, $version);
                }
            }
        }
    }
    return $lost ? $lost : true;
}
Beispiel #18
0
 public function __construct()
 {
     parent::__construct();
     $this->serviceUri = DBC("remote.service.uri");
     $this->lang = strtolower(C("LANG"));
 }
 /**
  * 包含模型数据
  * @param $sourceData 源多条数据
  * @param $modelDataIds 所有包含的模型ID
  * @param $modelAlias
  */
 public function assignModelData($sourceData, $modelDataIds = false)
 {
     $modelData = array();
     //无model data id时
     if (!$modelDataIds or $modelDataIds === "product") {
         $modelDataIds = array();
         foreach ($sourceData as $k => $v) {
             if ($v["factory_code_all"]) {
                 $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
                 //根据factory_code_all factory_code - standard - version
                 $factory_code = array_shift($tmp);
                 $modelDataIds = array_merge($modelDataIds, $tmp);
                 $sourceData[$k]["modelIds"] = $tmp;
             }
         }
         //model data id为product modelAlias时
     } else {
         if (!is_array($modelDataIds)) {
             // $modelDataIds为模型alias
             $dataModelObject = D("DataModel");
             $theDataModel = $dataModelObject->getByAlias($modelDataIds);
             foreach ($sourceData as $v) {
                 $sourceIds[$v["id"]] = $v["id"];
             }
             $tmp = $this->where(array("model_id" => $theDataModel["id"], "source_id" => array("IN", implode(",", $sourceIds))))->select();
             $modelDataIdsQueryd = array();
             foreach ($tmp as $v) {
                 $modelDataIdsQueryd[$v["source_id"]][] = $v["id"];
                 $modelData[$v["id"]] = $v;
             }
             foreach ($sourceData as $k => $v) {
                 $sourceData[$k]["modelIds"] = $modelDataIdsQueryd[$v["id"]];
             }
             $modelDataIds = $modelDataIdsQueryd;
         }
     }
     if (empty($modelDataIds)) {
         return $sourceData;
     }
     if (!$modelData) {
         $tmp = $this->where(array("id" => array("IN", implode(",", $modelDataIds))))->select();
         foreach ($tmp as $v) {
             $modelData[$v["id"]] = $v;
         }
     }
     foreach ($sourceData as $k => $v) {
         if (!$v["modelIds"]) {
             continue;
         }
         foreach ($v["modelIds"] as $mid) {
             $fieldConf = explode("\n", $modelData[$mid]["extra_data"]);
             if (in_array("bindToLabel::true", $fieldConf)) {
                 $sourceData[$k][$modelData[$mid]["field_name"]] = $mid;
                 $sourceData[$k][$modelData[$mid]["field_name"] . "_label"] = $modelData[$mid]["data"];
             } else {
                 $sourceData[$k][$modelData[$mid]["field_name"]] = $modelData[$mid]["data"];
             }
         }
     }
     return $sourceData;
 }
Beispiel #20
0
 public function read()
 {
     if (!$_GET["includeRows"] or $_GET['workflow']) {
         return parent::read();
     }
     $formDatas = parent::read(true);
     $rowModel = D("StockinDetailView");
     if ($formDatas["id"]) {
         $isSingle = true;
         $formDatas = array($formDatas);
     }
     foreach ($formDatas as $id => $formData) {
         $formData["dateline"] *= 1000;
         $formData["stock_manager"] = toTruename($formData["stock_manager"]);
         $rows = $rowModel->where("StockinDetail.stockin_id=" . $formData["id"])->select();
         $modelIds = array();
         $rowData = array();
         foreach ($rows as $v) {
             $tmp = explode(DBC("goods.unique.separator"), $v["factory_code_all"]);
             //根据factory_code_all factory_code - standard - version
             $factory_code = array_shift($tmp);
             $modelIds = array_merge($modelIds, $tmp);
             $v["modelIds"] = $tmp;
             $v["stock"] = $v["stock_id"];
             $v["stock_label"] = $v["stock_name"];
             $v["goods_id"] = sprintf("%s_%s_%s", $factory_code, $v["goods_id"], $v["goods_category_id"]);
             // factory_code, id, catid
             $v["goods_id_label"] = sprintf("%s", $v["goods_name"]);
             $v["total_num"] = $v["num"];
             $v["num"] = $v["num"] - $v["ined"];
             $rowData[$v["id"]] = $v;
         }
         $params = array($rowData, $modelIds);
         tag("assign_dataModel_data", $params);
         $formData["rows"] = reIndex($params[0]);
         if ($formData["source_model"] && $formData["source_id"]) {
             $sourceModel = D($formData["source_model"] . "View");
             $formData["source"] = $sourceModel->find($formData["source_id"]);
             if ($_GET["includeRelated"]) {
                 try {
                     $model = D($formData["source_model"]);
                     $related = $model->getRelatedItem($formData["source_id"]);
                     $formData["relatedItems"][] = $related;
                 } catch (Exception $e) {
                 }
                 if ($_GET["includeSourceRows"]) {
                     $model = D($formData["source_model"] . "DetailView");
                     $foreignKey = $model->foreignKey ? $model->foreignKey : lcfirst($formData["source_model"]) . "_id";
                     $map[$foreignKey] = $formData["source_id"];
                     $formData["source_detail"] = $model->where($map)->select();
                 }
             }
         }
         $results[] = $formData;
     }
     if ($isSingle) {
         $this->response($formData);
         return;
     }
     $response = array("count" => count($results), "datas" => $results);
     $this->response($response);
 }
Beispiel #21
0
 public static function data_field_format($value, $type)
 {
     switch ($type) {
         case "integer":
             $value = (string) $value;
             $value = (int) $value;
             break;
         case "foreign":
             $value && ($value = (int) $value);
             break;
         case "float":
         case "decimal":
             $value = (string) $value;
             $value = round($value, DBC('decimal_scale'));
             break;
         case "boolean":
             $value = (bool) $value ? 1 : -1;
             break;
         case "enum":
             $value = (string) $value;
             if (is_numeric($value)) {
                 $value = (int) $value;
             }
             break;
     }
     return $value;
 }
 /**
  * 1、修改库存数量  判断库存数量
  * 2、修改出库单状态
  * 3、判断是否已完全出库
  *
  * 在显示确认出库页面时获取的数据已经减去了已出库的数量
  * 所以仅需按照提交的表单进行处理即可。
  *
  * 三种情况:足额出库
  *          超额出库
  *          未完全出库
  */
 public function run()
 {
     //判定是否已完全出库
     $stockout = D("Stockout");
     $theStockout = $stockout->find($this->mainrowId);
     if (!$_REQUEST["donext"]) {
         if ($theStockout["outed_num"] >= $theStockout["total_num"]) {
             $data = array("type" => "message", "error" => "true", "msg" => "all_have_outed_stock");
         } else {
             $data = array("type" => "redirect", "location" => sprintf("/doWorkflow/Stockout/confirm/%d/%d", $this->currentNode["id"], $this->mainrowId));
         }
         $this->response($data);
     }
     $data = $_POST["data"];
     $dm = D("StockoutDetail");
     $stockout->startTrans();
     $totalOuted = 0;
     $storeProduct = D("StockProductList");
     $dataModel = D("DataModel")->getByAlias("product");
     $tmp = D("DataModelFields")->where("model_id=" . $dataModel["id"])->select();
     $dataModelFields = array();
     foreach ($tmp as $field) {
         $dataModelFields[] = $field["field_name"];
     }
     $stockLog = D("StockLog");
     $logs = array();
     foreach ($data["rows"] as $k => $v) {
         if (!$v or !$v["id"]) {
             continue;
         }
         //未选择出库仓库
         if (!$v["stock"]) {
             $stockout->rollback();
             $this->error("select_stock");
             return "error";
         }
         if (strpos($v["goods_id"], "_") !== false) {
             list($fc, $v["goods_id"], $catid) = explode("_", $v["goods_id"]);
         }
         //本次出库总数量
         $totalOuted += $v["num"];
         //更新本行出库数量
         $dm->where("id=" . $v["id"])->setInc("outed", $v["num"]);
         //出库日志(工作流MEMO)
         //dataModel
         $modelData = "";
         foreach ($dataModelFields as $f) {
             $modelData .= "/" . $v[$f . "_label"];
         }
         $tmp = sprintf("%s%s: %s (%s)", $v["goods_name"], $modelData, $v["num"], $v["stock_label"]);
         array_push($logs, $tmp);
         //减少库存
         $storeProduct->where(array("factory_code_all" => $v["factory_code_all"], "stock_id" => $v["stock"]))->setDec("num", $v["num"]);
         //记录库存操作日志
         $stockLog->record(array("factory_code_all" => $v["factory_code_all"], "repository_id" => $v["stock"], "num" => $v["num"], "source_id" => $this->mainrowId, "source_row_id" => $v["id"], "dateline" => CTS, "type" => 2, "memo" => $v["memo"], "goods_id" => $v["goods_id"]));
     }
     //不允许负数库存存在, 库存自动清零
     //@todo 判断库存数量
     if (!DBC("allow_negative_store")) {
         $storeProduct->where("num<0")->save(array("num" => 0));
     }
     //更新出库单信息
     $theStockout = $stockout->find($this->mainrowId);
     if ($theStockout["status"] == 1) {
         $stockout->where("id=" . $this->mainrowId)->setInc("outed_num", $totalOuted);
     } else {
         //第一次出库
         $stockout->where("id=" . $this->mainrowId)->save(array("memo" => $data["memo"], "status" => 1, "outtime" => CTS, "outed_num" => $totalOuted, "stock_manager" => getCurrentUid()));
     }
     //本次出库日志
     $this->context['memo'] = implode("\n", $logs);
     $stockout->commit();
 }
Beispiel #23
0
 public function get_full_data($id)
 {
     if (!$this->check_params()) {
         $this->error = __('common.System Error');
         return false;
     }
     $meta = D($this->main_model, 'Model')->where(['id' => $id])->find();
     if (!$meta) {
         // @todo error_message
         return false;
     }
     if ($this->is_locked($meta['status'])) {
         $meta['locked'] = true;
     }
     $meta = Schema::data_format($meta, $this->main_table, true);
     $detail_model = D($this->detail_model, 'Model');
     $rows = $detail_model->where([$this->detail_main_foreign => $id])->select();
     // 本次出入库数量
     if ($this->include_this_time_quantity && $this->balance_direction) {
         foreach ($rows as $k => $v) {
             $this_time_quantity_field = sprintf('this_time_%s_quantity', $this->balance_direction);
             $rows[$k][$this_time_quantity_field] = round($v['quantity'] - $v['already_' . $this->balance_direction], DBC('decimal_scale'));
         }
     }
     $rows = Schema::data_format($rows, $this->detail_table, true);
     // 工作流进程
     $progress_service = D('Bpm/WorkflowProgress');
     $meta['workflow_progress'] = $progress_service->get_progress($meta['workflow_id'], $meta['id']);
     // 产品属性
     if (AppService::is_app_active('productAttribute')) {
         $rows = D('ProductAttribute/ProductAttribute')->assign_to_by_product_unique($rows, $this->detail_model_alias);
     }
     return ['meta' => $meta, 'rows' => $rows];
 }
Beispiel #24
0
function decimal_scale($value)
{
    $scale = DBC('decimal_scale');
    $scale = $scale ? $scale : 2;
    return sprintf('%.' . $scale . 'f', $value);
}
                },
                basePath: '<?php 
echo $APP_PATH;
?>
',
                userInfo: <?php 
echo $userInfo;
?>
,
                asyncScript: [],
            };
            <?php 
if (DBC('site.html5.mode')) {
    ?>
ones.useHTML5 = <?php 
    echo DBC('site.html5.mode');
    ?>
;<?php 
}
?>
        </script>
        <?php 
if (is_array($javascripts)) {
    foreach ($javascripts as $key => $js) {
        ?>
<script src="<?php 
        echo $js;
        ?>
"></script><?php 
    }
}
Beispiel #26
-1
 public function get_full_info($id)
 {
     $current_node = $last_node = $this->where(['id' => $id])->find();
     $this_line_nodes = [];
     for ($i = $last_node['type'] - 1; $i >= 0; $i--) {
         $current_node = $this_line_nodes['type_' + $i] = $this->where(['id' => $current_node['parent_id']])->find();
     }
     array_unshift($this_line_nodes, $last_node);
     $this_line_nodes = array_reverse($this_line_nodes);
     $response = ['full_name' => '', 'selected_region_item_ids' => [], 'selected_region_item' => []];
     foreach ($this_line_nodes as $p) {
         if (DBC('region_ignore_country') > 0 && $p['type'] == 0) {
         } else {
             array_push($response['selected_region_item_ids'], (int) $p['id']);
             array_push($response['selected_region_item'], ['id' => (int) $p['id'], 'type' => (int) $p['type'], 'name' => $p['name']]);
             $response['full_name'] .= $p['name'];
         }
     }
     return $response;
 }