Ontem, eu pedi para a Hostinger usar o PHP 8.4, pois eu não vi nenhum problema aqui no Notebook.
Hoje eu aprendi que o Notebook é uma coisa, mas o Hostinger é coisa totalmente diferente.
Aqui no Notebook, o seguinte comando gera um arquivo CSV:
fputcsv($arquivo, $dados[0]);
Mas o PHP 8.4 do Hostinger é diferente, ele reclama que o comando está depreciado e que preciso colocar os parâmetros do $escape, assim:
fputcsv($arquivo, $dados[0],',','"','\\');
Eu consegui os parâmetros graças ao Copilot. O meu programa orçamento não gera e nem tem credencial para emitir uma NFC-e, o máximo que eu consegui fazer é montar um pedido nos moldes da Bling, depois vou na Bling, importo o pedido, e em seguida emito a NFC-e. O mais comum é o Cupom Fiscal, mas em São Paulo, você precisa do SAT para autenticar o cupom. Já o NFC-e é a antiga NF Série D, na versão eletrônica, e ele não precisa do SAT para ser autenticado e a Bling não tem uma versão para emitir o Cupom Fiscal.
A Bling tem rotina para gerar pedido, mas achei oportuno fazer um Orçamento em PHP para facilitar na hora de usar o tablet ou celular:
<?php
classOrcamento{function apagarBling($pedido){(newConn)->update("tbpedido set bling=null where ped=$pedido");return $this->inicio($pedido);}function bling($pedido){
$pBling=$_GET['pBling'];
$verificar=(newConn)->select("count(bling) as contagem from tbpedido where bling=$pBling")[0]->contagem;if($verificar){
echo "<h1>Pedido Bling $pBling já foi criado. <a href=?Orcamento.inicio>Voltar</a></h1>";exit;}(newConn)->update("tbpedido set bling=$pBling where ped=$pedido");
$contato="Consumidor Final";
$itens=(newConn)->select("* from tbhistped where ped=$pedido");
$previa=(newConn)->select("sum(subtotal) as soma from tbhistped
where subtotal < 0 and ped=$pedido")[0]->soma;
$desconto=$previa ? abs($previa):0;
$total=(newConn)->select("total from tbpedido where ped=$pedido")[0]->total;
$data=date('d/m/Y',strtotime((newConn)->select("dia from tbpedido
where ped = $pedido")[0]->dia));
$dados = array(
array("Número pedido","Nome Comprador","Data","CPF/CNPJ Comprador","Endereço Comprador","Bairro Comprador","Número Comprador","Complemento Comprador","CEP Comprador","Cidade Comprador","UF Comprador","Telefone Comprador","Celular Comprador","E-mail Comprador","Produto","SKU","Un","Quantidade","Valor Unitário","Valor Total","Total Pedido","Valor Frete Pedido","Valor Desconto Pedido","Outras despesas","Nome Entrega","Endereço Entrega","Número Entrega","Complemento Entrega","Cidade Entrega","UF Entrega","CEP Entrega","Bairro Entrega","Transportadora","Serviço","Tipo Frete","Observações","Qtd Parcela","Data Prevista","Vendedor","Forma Pagamento","ID Forma Pagamento"));foreach($itens as $item){if($item->subtotal>0){
$dados[]=array($pBling,$contato,$data,null,null,null,null,null,null,null,null,null,null,null,null,
$item->codprod,$item->un,$item->qt,$item->unitario,$item->subtotal,
$total,null,$desconto,null,null,null,null,null,null,null,null,null,null,null,null,null,1,$data,null,1,0);}}
$arquivo = fopen("$pBling.csv","w");
fputcsv($arquivo, $dados[0],',','"','\\');foreach($dados as $linha){if($linha != $dados[0]){
fputcsv($arquivo, $linha,',','"','\\');}}
fclose($arquivo);if(file_exists("$pBling.csv")){
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='. basename("$pBling.csv"));
header('Content-Length: '. filesize("$pBling.csv"));
readfile("$pBling.csv");
unlink("$pBling.csv");}}function confirmar(){
$ped=$_POST['ped'];if(!empty($_POST['dinheiro'])){
$dinheiro=str_replace(',','.',$_POST['dinheiro']);
$troco=str_replace(',','.',$_POST['troco']);}else{
$dinheiro=0;
$troco=0;}if(isset($_POST['cartao'])){$cartao=1;}else{$cartao=0;}if(isset($_POST['pix'])){$pix=1;}else{$pix=0;}if(!empty($_POST['parcial'])){if($dinheiro!==0){
echo "<script>location.replace('orcamento.php')></script>";exit;}
$dinheiro=$_POST['parcial'];
$troco=0;}
$horavenda=date('Y-m-d H:i');(newConn)->update("tbpedido set horavenda='$horavenda',dinheiro=$dinheiro,
troco=$troco,cartao=$cartao,pix=$pix where ped=$ped");return $this->inicio();}function corrigir($ped){(newConn)->update("tbpedido set horavenda=null,horavenda=null,dinheiro=null,
troco=null,cartao=0,pix=0 where ped=$ped");return $this->inicio();}function excluir($id){
$ped=$_GET['pedido'];(newConn)->delete("tbhistped where id=$id");
$novoTotal=(newConn)->select("sum(subtotal) as soma from tbhistped where ped=$ped")[0]->soma;if($novoTotal==null){
$novoTotal='null';}(newConn)->update("tbpedido set total=$novoTotal where ped=$ped");return $this->inicio($ped);}function historicoOrc($hist){
$where="";if($hist){
$ped=$_SESSION['referencia']+$hist;
$where="where ped <= $ped";}
$pedidos=(newConn)->select("* from tbpedido left join tbpessoa on
tbpedido.codp = tbpessoa.codp $where order by ped desc limit 20");
$_SESSION['referencia']=$pedidos[0]->ped;return view('orcamentoHist',['pedidos'=>$pedidos]);}function inicio($pedido =null){
$prod=(newConn)->select("* from tbprod order by prod");
$maquina=strpos($_SERVER['HTTP_USER_AGENT'],"Windows");
$hoje=date('Y-m-d');
$where="";if($pedido){
$where="where ped=$pedido";
$vr['codprod']=(isset($_SESSION['codprod']))? $_SESSION['codprod']:null;if($vr['codprod']){
$codprod=$vr['codprod'];
$produto=(newConn)->select("* from tbprod where codprod=$codprod")[0];
$vr['prod']=$produto->prod;
$vr['un']=$produto->un;
$custo=$produto->custo;
$margem=$produto->marg;
$vr['preço']=pvenda($custo,$margem);}else{
unset($_SESSION['codprod']);
$vr=['ped'=>'','diaped'=>$hoje,'totalped'=>'','codp'=>'','pessoa'=>'','end'=>'','cnpj'=>'','tel'=>'','nota'=>'','codprod'=>'','un'=>'','prod'=>null,'preço'=>'','horavenda'=>'','bling'=>''];}}
$ped=(newConn)->select("* from tbpedido $where order by ped desc")[0];
$vr['ped']=$ped->ped;
$_SESSION['ped']=$ped->ped;
$vr['diaped']=$ped->dia;
$vr['horavenda']=$ped->horavenda;
$vendido=($ped->horavenda)?true:false;
$vr['totalped']=$ped->total;
$vr['bling']=$ped->bling;
$vr['codp']=$ped->codp;if(isset($_SESSION['codp'])){
$vr['codp']=$_SESSION['codp'];
unset($_SESSION['codp']);}if($vr['codp']){
$pessoa=(newConn)->select("* from tbpessoa where codp=". $vr['codp'])[0];
$vr['pessoa']=$pessoa->pessoa;
$vr['end']=$pessoa->end;
$vr['cnpj']=$pessoa->cnpj;
$vr['tel']=$pessoa->tel;
$vr['nota']=$pessoa->nota;}
$histped=(newConn)->select("tbhistped.id,tbhistped.ped, tbhistped.codprod,
tbhistped.qt as qt, tbhistped.unitario as unitario, tbhistped.subtotal,
tbprod.prod as prod, tbprod.un as un
from tbhistped inner join tbprod on tbhistped.codprod = tbprod.codprod
and tbhistped.ped = $ped->ped order by tbhistped.id");return view('orcamentoView',['vr'=>$vr,'histped'=>$histped,'prod'=>$prod,'maquina'=>$maquina,'vendido'=>$vendido]);}function menu(){
unset($_SESSION['codprod']);
unset($_SESSION['codp']);
unset($_SESSION['pessoa']);return $this->inicio();}function novo(){
$pedido=(newConn)->select("* from tbpedido order by ped desc")[0];
$ped=$pedido->ped;
$total=$pedido->total;if($total!==null){
$ped++;
$dia=date('Y-m-d');(newConn)->insert("tbpedido (dia,ped) values ('$dia',$ped)");}return header("location:?Orcamento.inicio.$ped");}function pedido($pedido){
$_SESSION['ped']=$pedido;return $this->inicio($pedido);}function pessoa($pedido){
$_SESSION['end']="?Orcamento.pessoaSelecionada.$pedido";if(isset($_GET['codp'])){
$codp=$_GET['codp'];return header("location:?pessoa.inicio.$codp");}return header("location:?Pessoa.inicio");}function pessoaSelecionada($pedido){
$codp=$_SESSION['codp'];(newConn)->update("tbpedido set codp = $codp where ped=$pedido");return $this->inicio($pedido);}function produto(){
$pedido=$_SESSION['ped'];
$_SESSION['end']="?Orcamento.inicio.$pedido";
$produto=str_replace(" ","%",$_POST['produto']);
$tamanho=strlen($produto);
$posicao=strpos($produto,":");if($posicao==0){if($produto!==""){
$_SESSION['criterio']="where prod like '%$produto%' order by prod";}return header("location:?Produto.inicio");}
$_SESSION['codprod']=substr($produto,$posicao+1,$tamanho-$posicao);return $this->inicio($_SESSION['ped']);}function qt(){
$qt=deca($_POST['qt']);
$codprod=$_SESSION['codprod'];
unset($_SESSION['codprod']);if($qt==0|| $qt==''){return $this->inicio();}
$produto=(newConn)->select("* from tbprod where codprod=$codprod")[0];
$ped=$_SESSION['ped'];
$un=$produto->un;
$custo=$produto->custo;
$margem=$produto->marg;
$unitario=pvenda($custo,$margem);
$subtotal=$qt*$unitario;(newConn)->insert("tbhistped (ped,codprod,un,unitario,subtotal,qt)
values ($ped,$codprod,'$un',$unitario,$subtotal,$qt)");
$novoTotal=(newConn)->select("sum(subtotal) as soma from tbhistped where ped=$ped")[0]->soma;(newConn)->update("tbpedido set total=$novoTotal where ped=$ped");return $this->inicio($ped);}}
Pergunta
Frank K Hosaka
Ontem, eu pedi para a Hostinger usar o PHP 8.4, pois eu não vi nenhum problema aqui no Notebook.
Hoje eu aprendi que o Notebook é uma coisa, mas o Hostinger é coisa totalmente diferente.
Aqui no Notebook, o seguinte comando gera um arquivo CSV:
fputcsv($arquivo, $dados[0]);
Mas o PHP 8.4 do Hostinger é diferente, ele reclama que o comando está depreciado e que preciso colocar os parâmetros do $escape, assim:
fputcsv($arquivo, $dados[0],',','"','\\');
Eu consegui os parâmetros graças ao Copilot. O meu programa orçamento não gera e nem tem credencial para emitir uma NFC-e, o máximo que eu consegui fazer é montar um pedido nos moldes da Bling, depois vou na Bling, importo o pedido, e em seguida emito a NFC-e. O mais comum é o Cupom Fiscal, mas em São Paulo, você precisa do SAT para autenticar o cupom. Já o NFC-e é a antiga NF Série D, na versão eletrônica, e ele não precisa do SAT para ser autenticado e a Bling não tem uma versão para emitir o Cupom Fiscal.
A Bling tem rotina para gerar pedido, mas achei oportuno fazer um Orçamento em PHP para facilitar na hora de usar o tablet ou celular:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.