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();
         }
     }
 }
예제 #3
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;
 }
예제 #4
0
 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);
 }
예제 #5
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'));
 }
예제 #6
0
 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;
 }
예제 #7
0
 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);
 }
예제 #8
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];
 }
예제 #9
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();
     $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];
 }