<?php

namespace admin\action\sample;
use model\baseModel;
use model\audit;
use \model\sample\sample;
use \model\sample\purc;
use \model\sample\comein;
use \model\sample\sampleDate;
use \model\history;
use \model\carmodel;
use \model\pro\pro;
use \model\pro\codeRule;
use \action;

/**
 * Class processAction
 */
class processAction  extends \action{

	/*
	* @method 模拟 PLM 开发完成
	* @param $sno 样品流水号
	* @param $innum 内部编码
	* @param $brand 品牌
	* @param $state 子状态
	* /admin/sample/process/fromplm?sno=201811010001&innum=NI-8-362&brand=OE&state=开发完成
	*/
	function fromplm($sno,$innum,$brand,$state)
	{
		$sample = new sample();
		$row = $sample->getRowByFieldValue('s_plmseq',$sno);
		if(empty($row)) exit('no sample');
		$custRow = (new \model\element('customer'))->getRowByKey($row['s_customer_name']);
	    $params = [
	        'customer_name'=>$custRow['ct_name'],
	        'number'=>$row['s_arri_number'],
	        'state_main'=>'YJ',
	        'state_sub'=>$state,//开发完成,已校对不开发
	        'innum'=>$innum,
            'ASUSER02' => $sno,
            'aSUSER03' => $brand,
            'update'=>'全量',//全量,状态
			'extfields'=>[
				//'SMEMO'=>'testSMEMO',
				//'SUSER06'=>'2021-11-19',
			]
	    ];
	    dump($params);
        $sample->setValue($row['s_id'], 's_stop', 0);
        $sample->setValue($row['s_id'], 's_state_sub', 0);
        $sample->setValue($row['s_id'], 's_check_tech', 1);
        dump($sample->fromplm($params));
	}
	
	/*
	* @method 检测号码
	* @param $fid 品牌ID
	* @param $number 号码
	*/
	function checkSampleNumber($sid,$fid,$number)
	{
		$sample = new sample();
	    $data = $sample->checkSampleNumber($sid,$fid,$number);
        $this->successJson($data);
	}

	/*
	* @method
	* @power view
	*/
    public function listView()
    {
        if(isset(\mvc::$req['process'])){
            \mvc::$cfg['method'] = 'list'.\mvc::$req['process'];
            \view::put('sample/process/list'.\mvc::$req['process']);
            return;
        }
        
        if(\p::has('H100','view')){
            \mvc::$cfg['method'] = 'list1';
            \view::put('sample/process/list1');
        }else if(\p::has('A220','view')){
            \mvc::$cfg['method'] = 'list2';
            \view::put('sample/process/list2');
        }else if(\p::has('A230','view')){
            \mvc::$cfg['method'] = 'list3';
            \view::put('sample/process/list3');
        }else if(\p::has('A240','view')){
            \mvc::$cfg['method'] = 'list4';
            \view::put('sample/process/list4');
        }else if(\p::has('A250','view')){
            \mvc::$cfg['method'] = 'list5';
            \view::put('sample/process/list5');
        }
    }
    public function list1()
    {
       \mvc::$cfg['method'] = 'list1';
       \view::put();
    }
    public function list2()
    {
        \view::put();
    }
    public function list3()
    {
        \view::put();
    }
    public function list4()
    {
        \view::put();
    }
    public function list5()
    {
        \view::put();
    }
    public function listFilters($filters,$params='')
    {
        \view::set('params',$params);
        \view::set('filters',$filters);
        \view::put('sample/process/list');
    }
	/*
	* @method
	* @power view
	*/
    public function list()
    {
        $req = \mvc::$req;
        $sample = new sample();
        //$rules=[];
		$rules = $this->urlRulesToWhere($req);
		if(isset($req['numbers'])){
			$rules['numbers'] = $req['numbers'];
			$rules['numlike'] = empty($req['numlike']) ? 0 : $req['numlike'];
		}
        if(!empty($req['oddno'])){
            $rules['oddno']=$req['oddno'];
        }
        if(!empty($req['process'])){
            $rules['process']=$req['process'];
        }
        if(!empty($req['outnum'])){
            $rules['outnum']=$req['outnum'];
        }
        if(!empty($req['myonly'])){
            $rules['myonly']=$req['myonly'];
        }
        $data = $sample->list($rules,$req['filters'], $req['page'], $req['rows'], $req['sidx'], $req['sord'],'s_id DESC');
        $this->successJson($data);
    }

    public function formMain()
    {
        $req = \mvc::$req;
        $sample = new sample();
        if($req['oddno']=='NULL'){
            $isNew = 1;
            $userRow = makeOne(\model\user::class)->getRowInfo(getOpuser());
            $item = [
                's_oddno'=> $sample->getOddnoNext(),
                's_code'=> $sample->getCodeNext(),
                's_plmseq'=> $sample->getPlmSeqNext(),
                's_apply_date'=> getNowDate(),
                's_apply_user'=> $userRow['au_id'],
                's_apply_depa'=> $userRow['captions']['au_depa'],
                's_apply_area'=> $userRow['captions']['au_area'],
                'create_time'=> getNowTime(),
                'update_time'=> getNowTime(),
                'captions'=>[
                    's_apply_user'=>$userRow['au_name']
                ]
            ];
        }else{
            $isNew = 0;
            $item = $sample->getRowByFieldValue('s_oddno',$req['oddno']);
            $item = $sample->getRowInfo($item);
        }
        \view::set('isNew',$isNew);
        \view::set('item',$item);
		\view::put($this->activeView().substr(__METHOD__,strpos(__METHOD__,':')+2));
    }


    public function formComein()
    {
        $req = \mvc::$req;
        $sample = new sample();
        if($req['oddno']=='NULL'){
            $isNew = 1;
            $userRow = makeOne(\model\user::class)->getRowInfo(getOpuser());
            $item = [
                's_oddno'=> $sample->getOddnoNext(),
                's_code'=> $sample->getCodeNext(),
                's_plmseq'=> $sample->getPlmSeqNext(),
                's_apply_date'=> getNowDate(),
                's_apply_user'=> $userRow['au_id'],
                's_apply_depa'=> $userRow['captions']['au_depa'],
                's_apply_area'=> $userRow['captions']['au_area'],
                'create_time'=> getNowTime(),
                'update_time'=> getNowTime(),
                'captions'=>[
                    's_apply_user'=>$userRow['au_name']
                ]
            ];
        }else{
            $isNew = 0;
            $item = $sample->getRowByFieldValue('s_oddno',$req['oddno']);
            $item = $sample->getRowInfo($item);
        }
        \view::set('isNew',$isNew);
        \view::set('item',$item);
		\view::put($this->activeView().substr(__METHOD__,strpos(__METHOD__,':')+2));
    }

    public function editCell()
    {
		$req = \mvc::$req;
        $id = $req['id'];
        $oper = $req['oper'];
        $field = $req['field'];
		if(isset($req['value']))
			$value = $req['value'];
 		else
			$value = $req[$field];
        $sample = new sample();
        if($oper=='edit'){
            if(substr($field,0,5)=='tech_'){
                $field = substr($field,5);
                $result = $sample->changeTech($id,$field,$value);
                if($result[0]==false){
                    $this->msgJson($result[1]);
                }
            }else{
                $result = $sample->setValue($id,$field,$value);
                if($result===-1){
                    $this->msgJson(lg('申请号码与客户名称存在重复'));
                }else if(is_array($result)){
                    if ($result[0] === -2 ) {
                        $this->msgJson(lg('到样号码与客户名称存在重复').','. lg('流水号') .': ' . $result[1]);
                    }else if ($result[0] === -10 ) {
                        $this->msgJson(lg('到样品牌+到样号码重复').','. lg('流水号') .': ' . $result[1]);
                    }else if ($result[0] === -11 ) {
                        $this->msgJson(lg('到样号码重复').','. lg('流水号') .': ' . $result[1]);
                    }
                }
            }
        }
    }

    public function addRow()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $data = $sample->addRow($req['oddno'],null,$req['type'],$req['isNew']);
        /*
        if($req['comein']=='1' && !empty($id)){
            $sample->comeinNewState($id);
        }*/
        $this->successJson($data);
    }

	public function addByCcu()
	{
		$req = \mvc::$req;
		$sample = new sample();
		$data = $sample->addAnyByCuucode($req['oddno'], $req['sccu_code'],null);
        $this->successJson($data);
	}

    public function deleteRows()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $res = $sample->deleteRows($req['ids']);
        if($res[0]){
            $this->successJson(lg('删除完成'));
        }else{
            $this->msgJson($res[1]);
        }
    }

    public function detail($id)
    {
        lg("停购审核");
        lg("初审");
        lg("初审驳回");
        lg("复审");
        lg("复审驳回");
        lg("技术部通过");
        lg("技术部驳回");
        lg("申请样品");
        lg("登记录入");
        lg("目录组通过");
        lg("目录组驳回");
        lg("终审");
        lg("终审不采购");
        lg("终审驳回");
        lg("采购录入");
        lg("采购状态");
        $sample = new sample();
        $item = $sample->getRowInfo($id);
        $isPurc = ($item['s_purc_user']==getOpuser()) ? 1 : 0;
        \view::set('item',$item);
        \view::set('isPurc',$isPurc);
        $history = new history();
        $hisArr = $history->getList('sample',$id);
        foreach($hisArr as $k=>$v){
            $hisArr[$k]['h_action'] = lg($hisArr[$k]['h_action']);
        }
        \view::set('history', $hisArr);

        \view::set('tech',$sample->getTech($id));
		$carmodel = new carmodel();
		\view::set('carModelFileds', $carmodel->fieldLnkCaption);
		\view::set('modelFiledVals', $carmodel->modelFiledVals);

		\view::put($this->activeView().substr(__METHOD__,strpos(__METHOD__,':')+2));
    }

    public function editPurcCell()
    {
		$req = \mvc::$req;
        $id = $req['id'];
        $oper = $req['oper'];
        $field = $req['field'];
		if(isset($req['value']))
			$value = $req['value'];
 		else
			$value = $req[$field];
        $purc = new purc();
        if($oper=='edit'){
            $purc->setValue($id,$field,$value);
        }
    }

    public function editComeinCell()
    {
		$req = \mvc::$req;
        $id = $req['id'];
        $oper = $req['oper'];
        $field = $req['field'];
		if(isset($req['value']))
			$value = $req['value'];
 		else
			$value = $req[$field];
        $comein = new comein();
        if($oper=='edit'){
            $comein->setValue($id,$field,$value);
        }
    }
    //申请完成
    public function applyComp()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $res = $sample->applyComp($req['ids'], $req['value']);
		$r = $res['code'];
        if ($r == 200) {
			if($res['msg']){
				$this->msgJson(lg('操作完成，'.implode(';', $res['msg'])));
			}else{
				$this->successJson(lg('操作完成'));
			}
        } else if ($r == 404) {
            $this->msgJson(lg('没有符合条件的记录'));
        } else if ($r == 300) {
            $this->msgJson(lg('存在 [品名] 、 [申请类型] 、 [申请品牌] 、 [申请号码]、 [客户名称] 不全的记录'));
        } else {
            $this->errorJson(500);
        }
    }
    //申请人退回 - 申请
    public function applyBack()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $r = $sample->applyBack($req['ids'], $req['value'], $req['remark']);
        if ($r == 200) {
            $this->successJson(lg('操作完成'));
        } else if ($r == 404) {
            $this->msgJson(lg('没有符合条件的记录'));
        } else {
            $this->errorJson(500);
        }
    }
    //申请人退回 - 登记
    public function comeinBack()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $r = $sample->comeinBack($req['ids'], $req['value'], $req['remark']);
        if ($r == 200) {
            $this->successJson(lg('操作完成'));
        } else if ($r == 404) {
            $this->msgJson(lg('没有符合条件的记录'));
        } else {
            $this->errorJson(500);
        }
    }
    
    //初审
    public function check1()
    {
        $req = \mvc::$req;
        $sample = new sample();
        list($state,$seq) = $sample->check1($req['ids'],$req['value'],$req['remark']);
        if($state==200){
            $this->successJson(lg('操作完成'));
        }else if($state==404){
            $this->msgJson(lg('没有符合条件的记录'));
        }else if($state==300){
            $this->msgJson($seq.' '.lg('数据不全'));
        }else{
            $this->errorJson(500);
        }
    }
    //复审
    public function check2()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $r = $sample->check2($req['ids'],$req['value'],$req['remark']);
        if($r==200){
            $this->successJson(lg('操作完成'));
        }else if($r==404){
            $this->msgJson(lg('没有符合条件的记录'));
        }else if($r==300){
            $this->msgJson(lg('存在数据不全的记录'));
        }else{
            $this->errorJson(500);
        }
    }
    //终审
    public function check3()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $r = $sample->check3($req['ids'],$req['value'],$req['remark']);
        if($r==200){
            $this->successJson(lg('操作完成'));
        }else if($r==404){
            $this->msgJson(lg('没有符合条件的记录'));
        }else if($r==300){
            $this->msgJson(lg('存在 [采购状态] 不全的记录'));
        }else{
            $this->errorJson(500);
        }
    }
    //采购完成
    public function purcComp()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $r = $sample->purcComp($req['ids'],$req['value']);
        if($r==200){
            $this->successJson(lg('操作完成'));
        }else if($r==404){
            $this->msgJson(lg('没有符合条件的记录'));
        }else if($r==300){
            $this->msgJson(lg('存在 [采购状态] 不全的记录'));
        }else{
            $this->errorJson(500);
        }
    }
    //采购状态更改
    public function purcState()
    {
        $req = \mvc::$req;
        if(trim($req['value'])==''){
            $this->msgJson(lg('请求无效'));
        }
        $sample = new sample();
        $r = $sample->purcState($req['ids'],$req['value'],$req['remark']);
        if($r==200){
            $this->successJson(lg('操作完成'));
        }else if($r==404){
            $this->msgJson(lg('没有符合条件的记录'));
        }else if($r==300){
            $this->msgJson(lg('存在数据不全的记录'));
        }else{
            $this->errorJson(500);
        }
    }
    //停购审核
    public function purcStop()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $r=$sample->purcStop($req['ids'],$req['value'],$req['remark']);
        if($r==200){
            $this->successJson(lg('操作完成'));
        }else if($r==404){
            $this->msgJson(lg('没有符合条件的记录'));
        }else if($r==300){
            $this->msgJson(lg('存在数据不全的记录'));
        }else{
            $this->errorJson(500);
        }
    }
    //登记完成
    public function comeinComp()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $r = $sample->comeinComp($req['ids'],$req['value']);
        if($r===200){
            $this->successJson(lg('操作完成'));
        }else if($r==404){
            $this->msgJson(lg('没有符合条件的记录'));
        }else if($r==300){
            //$this->msgJson(lg('存在  [品名] 、[来样方式]  、[到样品牌] 、 [到样号码] 、 [到样地点] 及 [客户名称] 、 [年需求量] 不全的记录'));
            $this->msgJson(lg('存在  [品名] 、[来样方式]  、[到样品牌] 、 [到样号码] 、 [到样地点] 及 [客户名称]  不全的记录'));
        }else{
            $this->errorJson(500);
        }
    }
    //目录组审核
    public function checkSales()
    {
        $req = \mvc::$req;
        $sample = new sample();
        list($state,$seq) =  $sample->checkSales($req['ids'],$req['value'],$req['remark']);
        if($state===200){
            $this->successJson(lg('操作完成'));
        }else if($state==404){
            $this->msgJson(lg('没有符合条件的记录'));
        }else if($state==300){
            $this->msgJson($seq.' '.lg('数据不全'));
        }else{
            $this->errorJson(500);
        }
    }
    //技术部审核
    public function checkTech()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $isAdmin = empty($req['isAdmin']) ? false : true;
        $r = $sample->checkTech($req['ids'],$req['value'],$req['data'],$isAdmin);
        if($r==200){
            $this->msgJson(lg('操作完成'));
        }else if($r==404){
            $this->msgJson(lg('没有符合条件的记录'));
        } else if ($r == 300) {
            $this->msgJson(lg('存在 [品名] 、[到样号码] 及 [客户名称] 不全的记录'));
        } else if ($r == 301) {
            $this->msgJson(lg('已借样无法驳回'));
        }else{
            $this->errorJson(500);
        }
    }

    //各状态数量统计
    public function getStateCount()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $data = $sample->getStateCount();
        $this->successJson($data);
    }

    //状态列表
    public function getStateList()
    {
        $req = \mvc::$req;
        $sample = new sample();
        //$data = $sample->getStateList($rules,$req['filters'], $req['page'], $req['rows'], $req['sidx'], $req['sord'],'s_oddno,s_code');
        $rules['where'] = [
            's_form'=>0, //只统计自购样
        ];
        $data = $sample->list($rules,$req['filters'], $req['page'], $req['rows'], $req['sidx'], $req['sord'],'s_oddno,s_code');
       $this->successJson($data);
    }
    
    //整单进度
    public function getOrdList()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $rules = [];
        $data = $sample->getOrdList($rules,$req['filters'], $req['page'], $req['rows'], $req['sidx'], $req['sord'],'s_oddno,s_code');
        $this->successJson($data);
    }

    //进程列表
    public function getProcessList()
    {
        $req = \mvc::$req;
        $sample = new sample();
        $rules=[];
        //$data = $sample->getProcessList($rules,$req['filters'], $req['page'], $req['rows'], $req['sidx'], $req['sord'],'s_oddno,s_code');
        $this->successJson($data);
    }
    
    

	/**
	  * @method 通过内部编码将样品设置为编码状态
	  * @param  s_id  int  [必填] 样品ID
	  * @param  innum  string  [必填] 内部编码
	  * @author soul
	  */
	public function changSampleByInnum()
	{
		$req = \mvc::$req;
		$sample = new sample();
		$sample->changSampleByInnum($req['s_id'], $req['innum']);
        
	}

	/**
	  * @method 样品的产品编码
	  * @param  s_id  int  [必填] 样品ID
	  * @author soul
	  */
	public function getSampleProCode()
    {
		$req = \mvc::$req;
        $sample = new sample();
        $data = $sample->getRowInfo($req['s_id']);
		//获取编码规则
		$codeRule = new codeRule();
		$rows = $codeRule->list();
		$data['amcoderule'] = [];
		foreach($rows['rows'] as $v)
		{
			if($v['pcr_enable'] && $v['pcr_am'])
			{
				$data['amcoderule'][] = $v;
			}
		}
        $this->successJson($data);
    }
	

	/**
	  * @method 重新生成样品的产品编码
	  * @param  id  int  [必填] 样品ID
	  * @param  auto  int  [必填] 0|1
	  * @param  pcr_id  int  [选填] auto = 0 时必填
	  * @author soul
	  */
	public function resetSampleProCode()
	{
		$req = \mvc::$req;
		$sample = new sample();
        $data = $sample->resetSampleProCode($req['s_id'], $req['auto'], $req['pcr_id']);
		$this->successJson($data);
	}

	
	

	/**
	  * @method 变更样品的产品编码 [弃用]
	  * @param  s_id  int  [必填] 样品ID
	  * @param  nums  array  [必填] 
	  * @param  addpro  int  [选填] 是否创建产品
	  * @author soul
	  */
	public function saveSampleProCode()
	{
		$req = \mvc::$req;
		$autonums = [];
		if(!empty($req['nums']))
		{
			foreach($req['nums'] as $fac=>$nv)
			{
				if($fac == 'OUTNUM'){
					$row = json_decode($nv['old'], true);
					//$row['num'] = $nv['num'];
					$autonums[$fac] = $row;
				}else{
					foreach($nv as $nkk=>$nvv)
					{
						$row = json_decode($nvv['old'], true);
						$row['num'] = $nvv['num'];
						$autonums[$fac][] = $row;
					}
				}
			}
		}
		$sample = new sample();
        $data = $sample->saveSampleProCode($req['s_id'], $autonums);
		if($req['addpro'])
		{
			$pro = new pro();
			$data = $pro->addProductBySample($req['s_id']);
		}
		$this->successJson($data);
	}
	
	/**
	 * 添加样品关注
	 */
	public function addFollowRow($ids)
	{
        if(!empty($ids)){
            if(!is_array($ids)) $ids = explode(',',$ids);
    		$sample = new sample();
            $data = $sample->addFollowRow($ids);
    		$this->successJson($data);
        }
	}

    /**
     * 删除样品关注
     */
    public function deleteFollowRow($ids)
    {
        if (!empty($ids)) {
            if (!is_array($ids)) $ids = explode(',', $ids);
            $sample = new sample();
            $data = $sample->deleteFollowRow($ids);
            $this->successJson($data);
        }
    }

	/**
	 * 添加产品管理的预计完成时间
	 */
	public function addPromanagerDate($sid, $date, $remark)
	{
        if(empty($sid) || empty($date) || empty($remark)) {
            $this->errorJson(1, '参数不正确');
        }
        $opUser = getOpuser();
        $rowData = [
            'date' => $date,
            'remark' => $remark,
        ];
        $sample = new sample();
        $sampleDate = new sampleDate();
        $dateRow = $sampleDate->getRowByKey($sid);
        $sample->db->begin();
        if (empty($dateRow['sdate_promanager_first_date'])) {
            $sampleDate->setValue($sid, 'sdate_promanager_first_date', $date);
        }
        $sampleDate->setValue($sid, 'sdate_promanager_end_date', $date);
        $sampleDate->setValue($sid, 'sdate_promanager', $opUser);

        $audit = new audit();
        $data['id'] = $audit->add('insert', 'promanager_date', $sid, $rowData, 'user', $opUser);
        $sample->db->end();
        $this->successJson($data);
	}
    /**
     * 目标完成日期
     */
    public function getTargetDate($sid)
    {
        $sampleDate = new sampleDate();
        $dateRow = $sampleDate->getRowByKey($sid);
        $data['targetDate'] = '';
        if ($dateRow) {
            $data['targetDate'] = $dateRow['sdate_promanager_first_date'] ?: $dateRow['sdate_target_date'];
        }
        $this->successJson($data);
    }
    /**
     * 检查重复号码
     */
    public function checkSameNumber($value, $id = '')
    {
        $sample = new sample();
        $data = $sample->checkSampleNumberNoFac($value, $id);
        $this->successJson($data);
    }
    
}