<?php
namespace model\pro;
use \model;
use model\element;
use model\projectItem;

/**
 * 
 */
class supplierPro  extends element
{   
    public $chkFields = ['spr_oe_id'=> '关联的零件ID','spr_sup_id'=>'供应商ID','spr_area'=>'区域','spr_cat_id'=>'零件分类',
    'spr_pf_id' =>'号码厂商','spr_number'=>'号码','spr_sup_num' => '工厂号码',
    'spr_material' => '属性','spr_price'=> '含税单价','spr_price2' =>'不含税价','spr_price3' => '原厂价格','spr_price4' => '指导价格',
    'spr_minbuy' => '起订量','spr_delivery' => '交期(天)','spr_price_btime'=> '工厂报价时间','spr_price_etime'=> '价格失效时间','spr_price_status' => '价格状态',
    'spr_has' => '是否现货','spr_hasample' => '是否提供样品','spr_from'=>'数据来源','spr_remark'=>'备注'
];
    public function add($data)
    {
        $this->db->Begin();
        $saveData = $this->formartSaveData($data);
        if(!$saveData['spr_sup_id'] && $saveData['sup_code']){
            $saveData['spr_sup_id'] = $saveData['sup_code'];
        }
        unset($saveData['sup_code']);
        $this->db->insert($this->table,$saveData);
		
		$key = $this->db->id();	
        //暂时隐藏
        // $log = [
        //     'cl_type'=>'suppro',
        //     'cl_act'=>'add',
        //     'cl_dataid'=>$key,
        //     'cl_change'=>json_encode(['suppro'=>[$saveData]], JSON_UNESCAPED_UNICODE),
        //     'cl_opuser'=>getOpuser(),
        //     'cl_create_time'=>getNowTime(),
        // ];
        // $this->db->insert('change_log', $log);
        $this->db->End();
        return $key;
    }

    public function edit($key,$data)
    {
        $this->db->Begin();
        $saveData = $this->formartSaveData($data);
        if(!$saveData['spr_sup_id'] && $saveData['sup_code']){
            $saveData['spr_sup_id'] = $saveData['sup_code'];
        }
        unset($saveData['sup_code']);
        $oldArr = $this->getOne($key);
        $this->db->update($this->table,$saveData,[$this->key=>$key]);
        $newArr = $this->getOne($key);
        $changeArr = [];
        $oe_ids = [];
        foreach ($this->chkFields as $field => $name) {

			$old = $oldArr['captions'][$field]??$oldArr[$field];
			$new = $newArr['captions'][$field]??$newArr[$field];
			if(isset($data[$field]) && $old != $new)
			{
				$changeArr[] = ['field'=>$field,'name'=>$name,'old'=>$old, 'new'=>$new];
                //零件供应商价格变化或者新增记录时调取下=>自动补充询价的价格
                if(in_array($field,['spr_price','spr_price2','spr_price3','spr_price4']) && $newArr['spr_oe_id']){
                    $oe_ids[] = $newArr['spr_oe_id'];
                }
			}
		}
        if($oe_ids){
            make(\model\homecn\trade::class)->autoAskItemPrice([], [], array_unique($oe_ids));
        }
        if(!empty($changeArr))
		{
			$log = [
				'cl_type'=>'suppro',
				'cl_act'=>'edit',
				'cl_dataid'=>$key,
				'cl_change'=>json_encode(['suppro'=>$changeArr], JSON_UNESCAPED_UNICODE),
				'cl_opuser'=>getOpuser(),
				'cl_create_time'=>getNowTime(),
			];
			$this->db->insert('change_log', $log);
		}
        $this->tolink($key,$data);
        $this->db->End();
        return $key;
    }

    function deleteRows($ids){
        if(!is_array($ids)){
            $ids = explode(',',$ids);
        }
        $this->db->Begin();
        $arr = $this->db->select($this->table,'*',[$this->key=>$ids]);
        foreach ($arr as $val) {
            $log = [
                'cl_type'=>'suppro',
                'cl_act'=>'del',
                'cl_dataid'=>$val['spr_id'],
                'cl_change'=>json_encode(['suppro'=>[$val]], JSON_UNESCAPED_UNICODE),
                'cl_opuser'=>getOpuser(),
                'cl_create_time'=>getNowTime(),
            ];
            $this->db->insert('change_log', $log);
        }
        $res = $this->db->delete($this->table,[$this->key=>$ids]);
        $oeIds = array_column($arr,'spr_oe_id');
        if(!empty($oeIds)){
            //查项目表是否有记录
            $exists = $this->db->select('project_item',['pi_id','pi_oe_id'],['pi_oe_id'=>$oeIds,'pi_status'=>2]);
            $projectItem = new projectItem();
            if(!empty($exists))
            {
                foreach ($exists as $item) {
                    //项目完全没有零件供应商 更改状态为待处理
                    $hasSpr = $this->db->count('supplier_pro',['spr_oe_id'=>$item['pi_oe_id']]);
                    if(empty($hasSpr)){
                        $projectItem->changeItemStatus($item['pi_id'],0,'删除零件供应商');
                    }
                }
            }
        }
        $this->db->End();
		return $res;
	}

    public function getOne($key)
    {
        $table = 'supplier_pro(spr)';
        $join = [
            '[>]supplier(sup)'=>['spr.spr_sup_id'=>'sup_id'],
            '[>]pro_cate(cate)'=>['spr.spr_cat_id'=>'id'],
            '[>]pro_factory(fac)'=>['spr.spr_pf_id'=>'pf_id'],
        ];
        $field = [
            'spr.*',
            'sup.sup_code',
            'sup.sup_name',
            'cate.'.LG_NAME.'(cat_name)',
            'fac.pf_name'
        ];
        $item = $this->db->get($table,$join,$field,['spr_id'=>$key]);
        if($item){
            $objArr  = [];
            $arr = $this->db->select('object',['o_parent_id','o_id',LG_NAME.'(obj_name)'],['o_parent_id'=>[13,16,21]]);
            foreach ($arr as $key => $val) 
            {
                $objArr[$val['o_id']] = $val['obj_name'];
            }
            $item['captions'] = [
                'spr_sup_id'=>$item['sup_name'],
                'spr_area'=>$objArr[$item['spr_area']],
                'spr_material'=>$objArr[$item['spr_material']],
                'spr_from'=>$objArr[$item['spr_from']],
                'spr_price_status'=>$item['spr_price_status'] == 'Y' ? '有效' : '失效',
                'spr_has'=>$item['spr_has'] == 'Y' ? '是' : '否',
                'spr_hasample'=>$item['spr_hasample'] == 'Y' ? '是' : '否',
            ];
        }
        return $item;
    }

}