public function assign_to_by_product_unique($rows) { if (!AppService::is_app_active('productAttribute')) { return []; } $attr_content_ids = []; foreach ($rows as $k => $row) { $unique_id = $row['product_unique_id']; if (!$unique_id) { continue; } $tmp = explode('|', $unique_id); $rows[$k]['attribute_content_ids'] = []; foreach ($tmp as $attr) { list($attr_id, $attr_content_id) = explode('_', $attr); array_push($attr_content_ids, $attr_content_id); array_push($rows[$k]['attribute_content_ids'], $attr_content_id); } } if (!$attr_content_ids) { return $rows; } $attribute_contents = D('ProductAttribute/ProductAttributeContent', 'Model')->where(['id' => ['IN', $attr_content_ids]])->select(); $attribute_contents = get_array_to_ka($attribute_contents, 'id'); foreach ($rows as $k => $row) { foreach ($row['attribute_content_ids'] as $ac_id) { if (array_key_exists($ac_id, $attribute_contents)) { $attribute_field = $attribute_contents[$ac_id]['alias']; $attribute_value = $attribute_contents[$ac_id]['content']; $rows[$k][$attribute_field] = $attribute_value; } } } return $rows; }
protected function _after_insert($id) { // 线索、客户、商机等上次联系时间,更新 if (I('post.crm_clue_id')) { // 线索 $related_id = I('post.crm_clue_id'); $model = "Crm/CrmClue"; } else { if (I('post.customer_id')) { // 客户 $related_id = I('post.customer_id'); $model = "Crm/Customer"; } } if ($model && $id) { D($model)->where(array('id' => $id, 'company_id' => get_current_company_id()))->save(array('last_contact_time' => date('Y-m-d H:i:s'))); } if (I('post.next_contact_time') && I('post.next_contact_content') && $related_id) { // 更新日程 if (AppService::is_app_active('calendar')) { $event_service = D('Calendar/Events'); $event_service->create(['subject' => I('post.next_contact_content'), 'type' => 'info', 'start_at' => I('post.next_contact_time'), 'end_at' => I('post.next_contact_time'), 'related_model' => $this->module_alias, 'related_id' => $related_id]); $event_service->add(); } } }
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; }
public function on_event_list() { $apps_get = I('get.apps'); if ($apps_get === "all") { $apps = array_merge((array) get_array_to_kv(D('Home/App')->select(), 'alias'), $this->baseApps); } else { $apps = explode(',', $apps_get); // 应用requirements foreach ($apps as $app) { $app_config = ConfigService::get_config_by_app($app); if ($app_config['requirements']) { $apps = array_merge($apps, (array) $app_config['requirements']); } } } array_unshift($apps, 'common'); $apps = array_unique($apps); if ($apps !== array("common", "account") && !$this->is_login()) { $this->login_required(); } $cache_key = sprintf('i18n/%s/all', CURRENT_LANGUAGE); $langs = S($cache_key); if (DEBUG || !$langs) { $langs = self::make_i18n_cache($cache_key); } $return = array(); foreach ($apps as $app) { if ($apps_get !== 'all' && $app !== "common" && !AppService::is_app_active($app)) { continue; } $return[$app] = $langs[$app]; } $this->response($return); }
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 get_main_include() { $main_include = []; foreach (AppService::$allAppConfigs as $app => $app_config) { if (!AppService::is_app_active($app)) { continue; } $main_include = array_merge_recursive($main_include, (array) $app_config['main_include']); } return $main_include; }
public function on_list() { $data = parent::on_list(true); $list = $data[1]; $product_ids = get_array_by_field($list, 'product_id'); $map = ['product_id' => ['IN', $product_ids]]; $total_balance = D('Storage/Stock')->field('SUM(balance) as total_balance, product_id, product_unique_id')->where($map)->group('product_unique_id')->select(); $total_balance = get_array_to_ka($total_balance, 'product_unique_id'); foreach ($list as $k => $v) { if (array_key_exists($v['product_unique_id'], $total_balance)) { $list[$k]['total_balance'] = $total_balance[$v['product_unique_id']]['total_balance']; } } // 产品属性 if (AppService::is_app_active('productAttribute')) { $list = D('ProductAttribute/ProductAttribute')->assign_to($list); } $data[1] = reIndex($list); $this->response($data, 'stock', true); }
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]; }
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(); $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($rows, $this->detail_model_alias); } return ['meta' => $meta, 'rows' => $rows]; }