Escolar Documentos
Profissional Documentos
Cultura Documentos
php
/**
* Classe PmpController
*
* Contém as Funções para Cadastro e Processamento do Plano Mestre de Produção
*
* @author Raphael Lacerda <mailto:raphael.lacerda@consilos.com.br>
*/
class PmpController extends AppController {
/**
* 07.11.2019 - Raphael: Itens Calculados pelo PMP
*
* @var array
*/
private $itens = array();
/**
* 07.11.2019 - Raphael: Erros encontrados durante o processamento
*
* @var array
*/
private $erros = array();
/**
* Indica se o PMP em Elaboração possui itens atrasados
*
* @var boolean
*/
private $atraso = false;
/**
* Habilitação para testes (apenas usar na base teste)
*
* @var boolean
*/
private $habTeste = false;
/**
* Relação de produtos encontrados em estoque
*
* @var array
*/
private $itensEstoque = array();
/**
* Informações do PMP Elaborado
*
* @var array
*/
private $infoPmp = array();
$dados = array(
'Z80_STATUS' => '2'
);
$where = array(
'Z80_FILIAL' => array('=',$filPmp),
'Z80_CODPMP' => array('=',$codPmp),
'Z80_SEQLOT' => array('=',$seqPmp),
);
DataLib::montarComandoBind("UPDATE","Z80010",$dados,
$where,null,false,true,false);
$dadosZbj = array(
'ZBJ_STATUS' => 'F'
);
$whereZbj = array(
'ZBJ_FILIAL' => array('=',$filPmp),
'ZBJ_CODPMP' => array('=',$codPmp),
'ZBJ_SEQLOT' => array('=',$seqPmp),
);
DataLib::montarComandoBind("UPDATE","ZBJ010",$dadosZbj,
$whereZbj,null,false,true,false);
$this->erros[] = "PMP $codPmp-$seqPmp Liberado. Aguarde o Email de
Confirmação da Geração de Ops.";
//HoldLib::enviar_email("000065","PMP $codPmp
Liberado",false,"Atenção!!!");
}
"Z80_FILIAL" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Filial do Sistema
"Z80_CODPMP" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Codigo Plano
"Z80_EMISSA" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true,"MASK"=>"data"),//Data Emissao
"Z80_CODUSR" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Codigo Usuario Protheus
"Z80_DESUSR" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Nome Usuario
"Z80_TIPO" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Tipo de Plano
"Z80_OBS" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Observacoes
"Z80_SEG" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Segmento
"Z80_CLVL" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Classe Valor
"Z80_NUMOP" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Nº Lote Op Gerada
"Z80_STATUS" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Situação Plano
"Z80_SEQLOT" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Sequência Abertura Lote
"Z80_FABRIC" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Fabrica
"Z80_GRPAFA" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Fabrica
"Z80_SEQUEN" => array(
"OBG"=>"N",
"ACAO"=>"MOSTRAR",
'LINK'=>array(
'title'=>'Visualizar Detalhes do Produto',
'href'=>'/pmp/visualizar_sequencia',
'campos'=>array('Z80_FILIAL','Z80_CODPMP','Z80_SEQLOT','Z80_ITEM','Z80_SEQUEN')
)
),//Sequencia
'campos'=>array('Z80_FILIAL','Z80_CODPMP','Z80_SEQLOT','Z80_IDCJTO')
)
),//
);
$strQuery = $this->Pmp->sql009();
$strBind = array(
':Z80_CODPMP' => $codPmp,
':Z80_SEQLOT' => $seqPmp
);
//$this->print_b($strQuery, $strBind);
$this->setFrm($tabs,$cmps,$strQuery,$strBind,"V");
$subMenu = array(
array('desc'=>'Planos Cadastrados', 'controller'=>'pmp',
'action'=>'index'),
array('desc'=>'Novo Plano', 'controller'=>'pmp',
'action'=>'mrp_fabricados'),
array('desc'=>'Gerar PDF', 'controller'=>'genericos',
'action'=>'gerar_pdf',$codPmp,0,"L"),
);
$this->set('inputs',$this->inputs);
$this->set('subMenu',$subMenu);
$this->empFil = $tmpFil;
}
"Z80_FILIAL" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Filial do Sistema
"Z80_CODPMP" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Codigo Plano
"Z80_EMISSA" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true,"MASK"=>"data"),//Data Emissao
"Z80_CODUSR" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Codigo Usuario Protheus
"Z80_DESUSR" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Nome Usuario
"Z80_TIPO" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Tipo de Plano
"Z80_OBS" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Observacoes
"Z80_SEG" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Segmento
"Z80_CLVL" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Classe Valor
"Z80_NUMOP" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Nº Lote Op Gerada
"Z80_STATUS" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Situação Plano
"Z80_SEQLOT" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Sequência Abertura Lote
"Z80_FABRIC" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Fabrica
"Z80_GRPAFA" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Fabrica
'campos'=>array('Z80_FILIAL','Z80_CODPMP','Z80_SEQLOT','Z80_ITEM','Z80_SEQUEN')
)
),//Sequencia
);
$where = " AND Z80_IDCJTO = :Z80_IDCJTO ";
$strQuery = $this->Pmp->sql009($where);
$strBind = array(
':Z80_CODPMP' => $codPmp,
':Z80_SEQLOT' => $seqPmp,
':Z80_IDCJTO' => $codCjto
);
//$this->print_b($strQuery, $strBind);
$this->setFrm($tabs,$cmps,$strQuery,$strBind,"V");
$subMenu = array(
array('desc'=>'Planos Cadastrados', 'controller'=>'pmp',
'action'=>'index'),
array('desc'=>'Novo Plano', 'controller'=>'pmp',
'action'=>'mrp_fabricados'),
array('desc'=>'Gerar PDF', 'controller'=>'genericos',
'action'=>'gerar_pdf',$codPmp,0,"L"),
);
$this->set('inputs',$this->inputs);
$this->set('subMenu',$subMenu);
$this->empFil = $tmpFil;
$this->Render('/Elements/form');
}
"Z80_FILIAL" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Filial do Sistema
"Z80_CODPMP" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Codigo Plano
"Z80_EMISSA" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true,"MASK"=>"data"),//Data Emissao
"Z80_DESUSR" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Nome Usuario
"Z80_TIPO" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Tipo de Plano
"Z80_OBS" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Observacoes
"Z80_NUMOP" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Nº Lote Op Gerada
"Z80_STATUS" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Situação Plano
"Z80_SEQLOT" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Sequência Abertura Lote
"Z80_FABRIC" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Fabrica
"Z80_GRPAFA" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","CABECALHO"=>true),//Fabrica
"Z80_SEQUEN" => array("OBG"=>"N", "ACAO"=>"MOSTRAR"),
"Z80_DATPRI" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","MASK"=>"data"),//Previsao Inicial
"Z80_DATPRF" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","MASK"=>"data"),//Previsao Final
"Z80_USO" => array("OBG"=>"N","ACAO"=>"MOSTRAR"),//Tipo de Uso
"Z80_SETOR" => array("OBG"=>"N","ACAO"=>"MOSTRAR","LABEL"=>"Setor
Inicial","OPTIONS"=>$setores),//Setor Vigente
"Z80_COR_OP" =>
array("OBG"=>"N","ACAO"=>"MOSTRAR","MASK"=>"color"),//Cor Op
/**********************************
Elaboração do Documento PMP
**********************************/
$this->set('options',$options);
$this->set('filtros',$filtros);
}
$wherePrj = null;
$whereAll = " WHERE 1=1 ";
$opcSel = explode(",",$con["opt"]);
if(in_array("1",$opcSel)){
$wherePrj .= " AND SB1.B1_X_ESTOQ != '2' ";
$whereAll .= " AND KANBAN != '2' ";
}
if(in_array("2",$opcSel)){
$whereAll .= " AND QTD_PRODUZIR > 0 ";
}
if(in_array("3",$opcSel)){
$whereAll .= " AND G2_PRODUTO IS NULL ";
}
if(in_array("5",$opcSel)){
$whereAll .= " AND Z41_ID IS NULL ";
}
$equi0102 = ProtheusLib::getZx6("000038",true);
$strQuery = $this->Pmp->sql003($wherePrj,$whereAll,$equi0102);
$ret = array($strQuery,$strBind);
return $ret;
}
$strQuery = $this->Pmp->sql011();
$strBind = array(":Z80_CODPMP"=>$codPmp);
$stid = DataLib::bdQueryExecBind($strQuery,$strBind);
while($item = DataLib::bdQueryFetch($stid,true)){
$dados = array(
"ZBK_FILIAL" => $item["ZBK_FILIAL"],// [C][4] Filial do Sistema
"ZBK_CODPMP" => $item["ZBK_CODPMP"],// [C][6] PMP
"ZBK_SEQUEN" => $item["ZBK_SEQUEN"],// [C][2] Sequencia
"ZBK_ITEM" => $item["ZBK_ITEM"],// [C][3] Item
"ZBK_SEQLOT" => $item["ZBK_SEQLOT"],// [C][2] Seq.PMP
"ZBK_COD" => $item["ZBK_COD"],// [C][18] Codigo do Produto
"ZBK_LOCAL" => $item["ZBK_LOCAL"],// [C][4] Armazem
"ZBK_QUANT" => $item["ZBK_QUANT"],// [N][12] Quantidade
);
if(isset($cons[$item["ZBK_SEQLOT"]][$item["ZBK_COD"]])){
foreach($cons[$item["ZBK_SEQLOT"]][$item["ZBK_COD"]] as $arm =>
$infArm){
if($infArm["QTDE"] >= $item["ZBK_QUANT"]){
$dados["ZBK_LOCAL"] = $arm;
$dados["ZBK_ITMCHI"] = $infArm["ITEM"];
$dados["ZBK_SEQCHI"] = $infArm["SEQUEN"];
break;
}
}
}
DataLib::montarComandoBind("INSERT","ZBK010",
$dados,null,null,false,true,false);
}
}
/**********************************
Análise da Utilização do Estoque no PMP
**********************************/
if(!empty($this->request->params['pass']) || !empty($this->request->query))
{
$tratamento = HoldLib::parametros_filtros($filtros);
$con = $tratamento["con"];
//echo '<pre>'; print_r($con); die;
$filtros = $tratamento["filtro"];
$itens = $this->con_relatorio_utilizacao_estoque_pmp($con);
//echo '<pre>'; print_r($itens); die;
if(!empty($itens)){
$this->set('itens',$itens);
$this->set('con',$con);
$this->set('options',$options);
} else {
echo $this->Session->setFlash("Não há dados para
exibição!","default",array("class"=>"msg-erro"));
}
}
$this->set('filtros',$filtros);
$this->set('optAcab',$optAcab);
if($post["acab"] == "S"){
$dados = array(
'Z81_ENTREG'=>$post["situa"]
);
$where = array(
'R_E_C_N_O_'=>array("=",$post["recno"])
);
DataLib::montarComandoBind("UPDATE","Z81010",$dados,
$where,null,false,true,false);
echo json_encode(array("result" => "ok"));
} else {
$tab = $post["tabela"];
$arm = $post["arm"];
$cod = $post["cod"];
if($post["situa"] == "N"){
$post["qtde"] = 0;
}
$infEst = $this->getEstPmp($cod,$arm);
$qtdArm = $infEst["B2_QATU"] - $infEst["Z60_QTDENT"];
if($qtdArm < $post["qtde"] && $post["situa"] != "N"){
$msg = "Não existe saldo suficiente para transferir o material
do Armazém <b>$arm</b> para o Armazém <b>11</b>:<br><br>";
$sqlZ60 = DataLib::montaInsert("Z60010",
$insZ60,"Z60_QTDSOL,Z60_QTDENT",true,true,null,"Z60_OBS");
DataLib::bdQueryExecute($sqlZ60);
$strBind = array(
":SITSEP" => $post["situa"],
":USRSEP" => $post["user"],
":QUANT" => $post["qtde"],
":DATSEP" => date("YmdHis"),
":RECNO" => $post["recno"],
);
//$this->print_b($strQuery,$strBind);
DataLib::bdQueryExecBind($strQuery,$strBind);
echo json_encode(array("result" => "ok"));
}
}
}
/**********************************
Schedule
**********************************/
//Itens Encontrados
$where = " AND CASE WHEN Z81_USO = '1' THEN Z80_SITSEP ELSE Z81_SITSEP END
NOT IN ('P','E') AND Z81_DATSEP >= '".date("YmdHis",strtotime("-4 days"))."' AND
Z81_QUANT > 0 ";
$strQuery = $this->Pmp->sql001($where);
$strBind = array(':DEL'=>'*');
$sitSep = ProtheusLib::getCboxZx3("Z81_SITSEP");
//echo '<pre>'; print_r($sitSep); die;
$stid = DataLib::bdQueryExecBind($strQuery,$strBind);
$n = 1;
while ($item = DataLib::bdQueryFetch($stid,true)) {
//echo '<pre>'; print_r($item); die;
$tr = '<tr>';
$tr .= '<td style="text-align:center;">'.$n.'</td>';//'<th></th>';
$tr .= '<td style="text-
align:center;">'.HoldLib::dateFormat($item["Z80_EMISSA"]).'</td>';//'<th>Emissão
PMP</th>';
$tr .= '<td style="text-align:center;">'.
$item["AF8_PROJET"].'</td>';//'<th>Projeto</th>';
$tr .= '<td style="text-align:left;">'.
$item["AF8_X_NRED"].'</td>';//'<th>Cliente</th>';
$tr .= '<td style="text-align:center;">'.
$item["AFC_EDT"].'</td>';//'<th>EDT</th>';
$tr .= '<td style="text-align:center;">'.
$item["B1_COD"].'</td>';//'<th>Produto</th>';
$tr .= '<td style="text-align:left;">'.
$item["B1_DESC"].'</td>';//'<th>Descrição</th>';
$tr .= '<td style="text-
align:right;">'.HoldLib::numberFormat($item["Z81_QUANT"]).'</td>';//'<th>Quantidade
</th>';
$tr .= '<td style="text-align:center;">'.
$item["B1_UM"].'</td>';//'<th>UM</th>';
$tr .= '<td style="text-align:center;">'.
$item["Z81_LOCAL"].'</td>';//'<th>Armazém</th>';
$tr .= '<td style="text-align:center;">'.($item["Z81_USO"] == '2' ?
'Expedido' : 'Consumido').'</td>';//'<th>Tipo de Uso</th>';
$tr .= '<td style="text-align:center;">'.
$sitSep[$item["Z81_SITSEP"]].'</td>';//'<th>Armazém</th>';
$tr .= '</tr>';
$trs['SE'] .= $tr;
$n++;
}
$msg = HoldLib::$styleEmail;
$msg .= HoldLib::getSaudacao(true);
if(!is_null($trs["EX"])){
$msg .= '<hr><p>PMP Estoque Expirado. Data de Emissão superior à 15
dias.</p>';
$msg .= $this->construcao_tabela($trs["EX"]);
}
if(!is_null($trs["PE"])){
$msg .= '<hr><p>Pendências de Separação do PMP Estoque.</p>';
$msg .= $this->construcao_tabela($trs["PE"]);
$msg .= '<p>Itens onde o documento do PMP foi emitido ha mais de 15
dias são automaticamente cancelados.</p>';
}
if(!is_null($trs["SE"])){
$msg .= '<hr><p>Retorno Conferência</p>';
$msg .= $this->construcao_tabela($trs["SE"]);
$msg .= '<p>Itens onde o documento do PMP foi emitido ha mais de 15
dias são automaticamente cancelados.</p>';
}
HoldLib::enviar_email("000010",$msg,false,"[PMP] Monitoramento");
$infoOp = DataLib::montarComandoBind("SELECT","SC2010",null,
$wheSc2,null,true,true);
$infoOp = reset($infoOp);
$infoOp = HoldLib::removeEspacos($infoOp);
if(!empty($infoOp["C2_X_PMP"])){
$wheZ80 = array(
"Z80_CODPMP" => array("=",$infoOp["C2_X_PMP"]),
"Z80_SEQLOT" => array("=",$infoOp["C2_X_PMPS"])
);
$dados = array("Z80_STATUS"=>"1");
DataLib::montarComandoBind("UPDATE","Z80010",$dados,
$wheZ80,null,true,true);
$wheZbj = array(
"ZBJ_CODPMP" => array("=",$infoOp["C2_X_PMP"]),
"ZBJ_SEQLOT" => array("=",$infoOp["C2_X_PMPS"])
);
$dados = array("ZBJ_STATUS"=>"1");
DataLib::montarComandoBind("UPDATE","ZBJ010",$dados,
$wheZbj,null,true,true);
}
DataLib::montarComandoBind("DELETE","SC2010",null,$wheSc2,null,true,true);
DataLib::montarComandoBind("DELETE","AFM010",null,$wheAfm,null,true,true);
DataLib::montarComandoBind("DELETE","Z59010",null,$wheZ59,null,true,true);
DataLib::montarComandoBind("DELETE","SD4010",null,$wheSD4,null,true,true);
DataLib::montarComandoBind("DELETE","SHY010",null,$wheSHY,null,true,true);
$sql["SC2"] = DataLib::montarComandoBind("COUNT","SC2010",null,
$wheSc2,null,true,true);
$sql["AFM"] = DataLib::montarComandoBind("COUNT","AFM010",null,
$wheAfm,null,true,true);
$sql["Z59"] = DataLib::montarComandoBind("COUNT","Z59010",null,
$wheZ59,null,true,true);
$sql["SD4"] = DataLib::montarComandoBind("COUNT","SD4010",null,
$wheSD4,null,true,true);
$sql["SHY"] = DataLib::montarComandoBind("COUNT","SHY010",null,
$wheSHY,null,true,true);
echo '<pre>';print_r($sql);die;
}