Na pasta NotaFiscal/Nfe crie um arquivo chamado TabCobranca.blade.php em seguida copie o conteúdo do arquivo TabCobranca do layout baixado e cole na view criada
Faça o loop da lista de forma de pagamento e preencha o elemento select de origem e lembre-se que os dados da origem virão do service ConstanteService do método tiposPagamento
<?php
use App\Service\ConstanteService;
?>
<select class="form-campo" id="tPag">
@foreach (ConstanteService::tiposPagamento() as $chave => $valor)
<option value="{{ $chave }}"
{{ ($notafiscal->tPag ?? null) == $chave ? 'selected' : null }}>
{{ $chave }} - {{ $valor }}</option>
@endforeach
</select>
no arquivo tabCobranca_js.js, crie um método chamado inserirDuplicata, o qual deverá:
- chamar os campos : tPag, forma_de_parcelar , vLiq, venda_id
- via ajax chame o método store da duplicata passando os campos como parâmetro.
function inserirDuplicata(){
var tPag = $("#tPag").val();
var forma_de_parcelar = $("#forma_de_parcelar").val()
var qtde_parcela = $("#qtde_parcela").val();
var valor = $("#vLiq").val();
$.ajax({
url: base_url + "nfeduplicata",
type: "post",
dataType:"Json",
data:{
nfe_id : nfe_id ,
tPag : tPag ,
forma_de_parcelar : forma_de_parcelar,
qtde_parcela : qtde_parcela,
valor : valor,
},
success: function(data){
location.reload();
},
beforeSend: function(){
}
});
}
No método store, faça os seguintes procedimentos:
- Receba os dados do formulário
- busque a nfe pelo id
- verifique o tipo de forma_de_parcelar
- caso seja 1, use o método explode o caractere "-" e coloque o resultado no array_parcela
- caso seja 2, faça o loop pela quantidade de parcelas e coloque o resultado no array_parcela
- exclua todas as duplicatas da respectiva venda
- faça um novo loop pela qtde de parcelas e crie uma nfeduplicata de acordo com o valor da parcela
- retorne a lista de duplicatas
public function store(Request $request)
{
$req = $request->except(["_token","_method"]);
$nfe = Nfe::find($req["nfe_id"]);
if($req["forma_de_parcelar"]==2){
$array_parcela = explode("-", $req["qtde_parcela"]);
}else{
for($i=1; $i<=$req["qtde_parcela"]; $i++){
$array_parcela[] = 30 * $i;
}
}
$valor_total = $nfe->vLiq;
$qtde_parcela = count($array_parcela);
$parcela = number_format($valor_total / $qtde_parcela, 2, ".", "");
$soma_parcela = 0;
NfeDuplicata::where("nfe_id", $req["nfe_id"])->delete();
for($i=0; $i < $qtde_parcela; $i++){
$duplicata = new \stdClass();
$duplicata->nfe_id = $req["nfe_id"];
$duplicata->tPag = $req["tPag"];
$duplicata->nDup = zeroEsquerda($i+1, 3);
$duplicata->dVenc = somarData(hoje(), $array_parcela[$i]);
if($i == $qtde_parcela-1){
$valor_parcela = $valor_total - $soma_parcela;
}else{
$valor_parcela = $parcela;
}
$soma_parcela += $parcela;
$duplicata->vDup = $valor_parcela;
NfeDuplicata::Create(objToArray($duplicata));
}
$lista = NfeDuplicata::where("nfe_id", $req["nfe_id"])->get();
$resultado = array();
foreach($lista as $l){
$duplicata = new \stdClass();
$duplicata->id = $l->id;
$duplicata->nfe_id = $l->nfe_id;
$duplicata->tPag = $l->tPag;
$duplicata->pagamento = ConstanteService::getTipoPagamento($l->tPag);
$duplicata->nDup = $l->nDup;
$duplicata->dVenc = databr($l->dVenc);
$duplicata->vDup = $l->vDup;
$resultado[] = $duplicata;
}
echo json_encode($resultado);
}
Na view tabCobranca.blade.php, lista as duplicatas da nfe, configurando um botão chamando o método alterarDuplicata, excluirDuplicata e listar os tipos de pagamento em cada linha
@foreach ($duplicatas as $duplicata)
<tr>
<td align="center">{{ $duplicata->nDup }}</td>
<td align="center" width="10%"><input type="date"
value="{{ $duplicata->dVenc }}" id="vencimento_{{ $duplicata->id }}"
class="form-campo" onchange="alterarDuplicata({{ $duplicata->id }})">
</td>
<td align="center" width="25%">
<select class="form-campo" name="tPag" id="tPag_{{ $duplicata->id }}"
onchange="alterarDuplicata({{ $duplicata->id }})">
@foreach (ConstanteService::tiposPagamento() as $chave => $valor)
<option value="{{ $chave }}"
{{ ($duplicata->tPag ?? null) == $chave ? 'selected' : null }}>
{{ $chave }} - {{ $valor }}</option>
@endforeach
</select>
</td>
<td align="center" width="15%"><input type="text" readonly="readonly"
value="{{ $duplicata->vDup }}" name="primeiro_vencimento"
class="form-campo"></td>
<td align="center" width="35%"><input type="text"
id="obs_{{ $duplicata->id }}" value="{{ $duplicata->obs }}"
class="form-campo"></td>
<td align="center"><a href="javascript:;"
onclick="alterarDuplicata({{ $duplicata->id }})"
class="btn btn-outline-verde d-inline-block btn-pequeno"
title="Detalhes">Salvar </a></td>
<td align='center'>
<a href='javascript:;' onclick='excluirDuplicata({{ $duplicata->id }})'
class='btn btn-sm btn-danger d-inline-block' title='Excluir'>
<i class='fas fa-trash'></i></a>
</td>
</tr>
@endforeach
No arquivo tabCobranca_js.js crie um método chamado AlterarDuplicata com os seguintes procedimentos:
- Receba os campos tPag, vencimento, obs
- via ajax chame o método nfeduplicata/id com método PUT passando os parâmetros necessários.
function alterarDuplicata(id){
var tPag = $("#tPag_"+id).val();
var dVenc = $("#vencimento_"+id).val()
var obs = $("#obs_"+id).val();
$.ajax({
url: base_url + "nfeduplicata/" + id ,
type: "put",
dataType:"Json",
data:{
tPag : tPag ,
dVenc : dVenc,
obs : obs,
},
success: function(data){
console.log(data);
fecharGiraGira();
},
beforeSend: function(){
giraGira();
}
});
}
No controller DuplicataController crie um método chamadao salvarAlteracao com os procedimentos:
- receba os dados do formulário
- salve as informações no banco de dados
try {
$req = $request->except(["_token","_method"]);
NfeDuplicata::where("id", $id)->update($req);
echo json_encode("ok");
} catch (\Throwable $th) {
//throw $th;
}
No arquivo tabCobranca_js.js crie um método chamado excluirDuplicata com os seguintes procedimentos:
- Receba o campo id
- via ajax chame o método nfeduplicata/id com método DELETE
- redireciona a página
function excluirDuplicata(id){
$.ajax({
url: base_url + "nfeduplicata/" + id ,
type: "DELETE",
data: { },
dataType:"Json",
success: function(data){
fecharGiraGira();
location.reload();
},
beforeSend: function(){
giraGira();
}
});
}
implemente o método destroy do Controller, com as seguinte ações:
- Busque a duplicata pelo id passado no parâmetro
- Caso encontre, exclua a mesma do banco, coloque esta instrução em um bloco try/catch
- refaça o cálculo das parcelas
- redirecione para a rota index
try {
$duplicata = NfeDuplicata::where("id", $id)->first();
$valor_total = Nfe::find($duplicata->nfe_id)->vLiq;
// $valor_total = NfeDuplicata::where("nfe_id", $duplicata->nfe_id)->sum("vDup");
//exclui o item
$duplicata->delete();
$lista = NfeDuplicata::where("nfe_id", $duplicata->nfe_id)->get();
if(count($lista)>0){
$parcela = number_format($valor_total / count($lista), 2, ".", "");
$i = 0;
$qtde_parcela = count($lista);
$soma_parcela = 0;
foreach($lista as $d){
$d->nDup = zeroEsquerda($i+1, 3);
if($i == $qtde_parcela-1){
$valor_parcela = $valor_total - $soma_parcela;
}else{
$valor_parcela = $parcela;
}
$soma_parcela += $parcela;
$d->vDup = $valor_parcela;
$d->save();
$i++;
}
}
echo json_encode("ok");
} catch (\Exception $e) {
echo json_encode($e->getMessage());
}