| Server IP : 54.233.248.239 / Your IP : 172.28.1.13 Web Server : Apache System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/html/vinumday2_0/app/Services/ |
Upload File : |
<?php
namespace App\Services;
use DB;
use Exception;
use App\BasicInfo;
use App\Modules\Canal\Models\Canal;
use Illuminate\Support\Facades\Log;
use App\Modules\Cadastro\Models\Cadastro;
use App\Modules\Confraria\Models\Confraria;
use App\Modules\ConfrariaMembro\Models\ConfrariaMembro;
use App\Modules\ContaCorrente\Models\ContaCorrente;
use App\Modules\Confraria\Services\ConfrariaService;
class ContaCorrenteService {
public static function atualizarSaldoExpirado($contaCorrente){
$data = date('Y-m-d H:i:s');
$saldoRestante = $contaCorrente->valor - $contaCorrente->saldo_resgatado;
$confraria_id = (!empty($contaCorrente->confraria_id)) ? $contaCorrente->confraria_id : NULL;
$contaSaldo = !empty($contaCorrente->confraria_id) ? $contaCorrente->confraria : $contaCorrente->cliente;
$saldoAtual = $contaSaldo->contaCorrente->saldo - $saldoRestante;
$saldoAtual = number_format($saldoAtual, 2, '.', '');
//Novo Registro
if($contaSaldo->contaCorrente->saldo > 0){
Log::info('ContaCorrenteService::atualizarSaldoExpirado(insert)');
DB::table('conta_corrente')->insert([
[
'confraria_id' => $confraria_id,
'cadastro_id' => $contaCorrente->cadastro_id,
'pedido_venda_id' => $contaCorrente->pedido_venda_id,
'data' => $data,
'tipo_movimento' => 'S',
'valor' => $saldoRestante,
'saldo' => $saldoAtual,
'saldo_usado' => 1,
'saldo_expirado' => 1,
'observacao' => 'Saldo Expirado'
]
]);
}
//Update Registro
$sql = "UPDATE conta_corrente SET saldo_resgatado = valor, saldo_usado = 1 WHERE id = {$contaCorrente->id}";
Log::info('ContaCorrenteService::atualizarSaldoExpirado(update) => SQL:' . $sql);
DB::statement($sql);
return true;
}
public static function atualizarConta($pedidoVenda, $tipoMovimento='E', $forceCashback = FALSE, $forceCanal = false, $observacao = ''){
Log::info('ContaCorrenteService::atualizarConta()');
$basicInfo = BasicInfo::find(1);
$confraria = ConfrariaService::buscarConfrariaUsuarioLogado($pedidoVenda->id_cliente);
$cliente = $pedidoVenda->cliente;
if($cliente->influencer){
Log::info('ContaCorrenteService::atualizarConta() => influencer = true - (pedidoVenda: '.$pedidoVenda->id.' | cliente: '.$pedidoVenda->id_cliente.')');
return false;
}
if(!$confraria){
if($basicInfo->validade_cashback == 0 || ($forceCashback == FALSE && $tipoMovimento == 'E' && $basicInfo->data_fim_geracao_cashback < date('Y-m-d H:i:s'))){
Log::info('ContaCorrenteService::atualizarConta() => validade_cashback == 0 || data_fim_geracao_cashback < today hour - (pedidoVenda: '.$pedidoVenda->id.' | cliente: '.$pedidoVenda->id_cliente.')');
return false;
}
//TipoMovimento E => Entrada
if($tipoMovimento == 'E' && $basicInfo->valor_minimo_cashback > $pedidoVenda->subtotal){ // Ex.: valor_minimo_cashback => 500 | total => 159,90
Log::info('ContaCorrenteService::atualizarConta() => valor_minimo_cashback > total == true - (pedidoVenda: '.$pedidoVenda->id.' | cliente: '.$pedidoVenda->id_cliente.')');
return false;
}
}
if($pedidoVenda->contaCorrente){
Log::info('ContaCorrenteService::atualizarConta() => pedido_venda_id == true - (pedidoVenda: '.$pedidoVenda->id.' | cliente: '.$pedidoVenda->id_cliente.')');
return false;
}
$data = date('Y-m-d H:i:s');
if($pedidoVenda->saldo_usado == 1){
$contaSaldo = !empty($pedidoVenda->confraria_id) ? $pedidoVenda->confraria : $pedidoVenda->cliente;
$saldo = ($contaSaldo->contaCorrente ? ($contaSaldo->contaCorrente->saldo) : 0);
$valor = abs($pedidoVenda->ajuste);
if($pedidoVenda->cupomPedidoVenda){
$cupom = $pedidoVenda->cupomPedidoVenda;
$total = $pedidoVenda->subtotal * (1 - (($cupom->percentual_desconto ? $cupom->percentual_desconto : 100) / 100)) - $cupom->valor_desconto;
$total = $total > 0 ? $total : 0;
$ajuste = $total - $pedidoVenda->subtotal;
$valor = $valor - abs($ajuste);
}
$saldo = $saldo - abs($valor);
$tipoMovimento = 'S';
$saldo = number_format($saldo, 2, '.', '');
$valor = abs($valor);
$valor = number_format($valor, 2, '.', '');
$confraria_id = (!empty($pedidoVenda->confraria_id)) ? $pedidoVenda->confraria_id : NULL;
Log::info('ContaCorrenteService::atualizarConta() => SQL: saĆda saldo usado');
DB::table('conta_corrente')->insert([
[
'confraria_id' => $pedidoVenda->confraria_id,
'cadastro_id' => $pedidoVenda->id_cliente,
'pedido_venda_id' => $pedidoVenda->id,
'data' => $data,
'tipo_movimento' => 'S',
'valor' => $valor,
'saldo' => $saldo,
'saldo_usado' => 1
]
]);
//->where('data_validade', '>', $data) - verificar @marcoskubas
if($confraria_id){
$Entradas = ContaCorrente::where('tipo_movimento', 'E')->where('cadastro_id', $cliente->id)->where('confraria_id', $confraria_id)->where('saldo_usado', 0)->orderBy('data_validade', 'ASC')->orderBy('data', 'ASC')->get();
}else{
$Entradas = ContaCorrente::where('tipo_movimento', 'E')->where('cadastro_id', $cliente->id)->where('saldo_usado', 0)->whereRaw('confraria_id IS NULL')->orderBy('data_validade', 'ASC')->orderBy('data', 'ASC')->get();
}
$total = 0;
foreach($Entradas as $entrada){
$saldo = ($entrada->valor - $entrada->saldo_resgatado);
Log::info("ContaCorrenteService::atualizarConta() => saldo: {$saldo} | valor: {$valor} | saldo_resgatado: {$entrada->saldo_resgatado}");
if($saldo <= ($valor)){ // saldo: 28.94 | valor: 78.92 | saldo_resgatado: 85.00
$saldo_resgatado = $saldo;
$saldo_resgatado = number_format($saldo_resgatado, 2, '.', '');
$sql = "UPDATE `conta_corrente` SET `saldo_usado` = 1, `saldo_resgatado` = `saldo_resgatado`+{$saldo_resgatado} WHERE id = {$entrada->id}"; //50
$valor = ($valor) - $saldo_resgatado; //78.92 - 28.94 = 49.98
Log::info('ContaCorrenteService::atualizarConta() => SQL:' . $sql);
DB::update($sql);
}else{
$saldo = ($entrada->valor - $entrada->saldo_resgatado);
$saldo = number_format($saldo, 2, '.', '');
$valor = number_format($valor, 2, '.', '');
if($saldo == $valor){
$sql = "UPDATE `conta_corrente` SET `saldo_usado` = 1, `saldo_resgatado` = `saldo_resgatado`+".($valor)." WHERE id = {$entrada->id}";
}else{
$sql = "UPDATE `conta_corrente` SET `saldo_resgatado` = `saldo_resgatado`+".($valor)." WHERE id = {$entrada->id}";
}
Log::info('ContaCorrenteService::atualizarConta() => SQL:' . $sql); //113,94 | 85
DB::update($sql);
}
}
}elseif(($pedidoVenda->id_status_pedido_venda == 2 || $pedidoVenda->id_status_pedido_venda == 7) && $pedidoVenda->saldo_usado == 0){
$totalCashback = $pedidoVenda->subtotal;
if($forceCanal == true){
if(isset($basicInfo->canal_id_cashback) && !empty($basicInfo->canal_id_cashback)){
$checkCanalPedido = Canal::select('pedido_venda_has_produto.*')
->join('canal_has_oferta', 'canal_has_oferta.id_canal', 'canal.id')
->join('pedido_venda_has_produto', 'pedido_venda_has_produto.id_oferta', 'canal_has_oferta.id_oferta')
->join('pedido_venda', 'pedido_venda.id', 'pedido_venda_has_produto.id_pedido_venda')
->where('pedido_venda.id', $pedidoVenda->id)
->where('canal.id', $basicInfo->canal_id_cashback)
->get();
if(count($checkCanalPedido) == 0){
return false;
}
$totalCashback = 0;
foreach ($checkCanalPedido as $canalPedido) {
$totalCashback += $canalPedido->valor_total;
}
}else{
return false;
}
}
if($confraria && $confraria->qtde_membros < ($basicInfo->min_membros_confraria+1)){
Log::info('ContaCorrenteService::atualizarConta() => $confraria->qtde_membros < ($info->min_membros_confraria+1) - (pedidoVenda: '.$pedidoVenda->id.' | cliente: '.$pedidoVenda->id_cliente.')');
return false;
}
$validade = $basicInfo->validade_cashback;
if($confraria){
$validade = $basicInfo->validade_cashback_confraria;
}
$confraria_id = (($confraria && empty($pedidoVenda->confraria_id)) ? $confraria->id : NULL);
$data_validade = date('Y-m-d', strtotime("+{$validade} days",strtotime($data)));
$valor = ContaCorrenteService::calcularValor($totalCashback, $basicInfo, 'cashback', $confraria);
if(!$confraria && $basicInfo->valor_minimo_cashback > $totalCashback){
return false;
}
if(!empty($confraria_id)){
$saldo = $valor + ($confraria->contaCorrente ? ($confraria->contaCorrente->saldo) : 0);
}else{
$saldo = $valor + ($cliente->contaCorrente ? ($cliente->contaCorrente->saldo) : 0);
}
$saldo = number_format($saldo, 2, '.', '');
if($confraria && $confraria->qtde_membros < ($basicInfo->min_membros_confraria+1)){
Log::info('ContaCorrenteService::atualizarConta() => $confraria->qtde_membros < ($info->min_membros_confraria+1) - (pedidoVenda: '.$pedidoVenda->id.' | cliente: '.$pedidoVenda->id_cliente.')');
return false;
}
if($confraria && is_numeric($pedidoVenda->confraria_id)){
$ConfrariaMembros = ConfrariaMembro::where('confraria_id', $confraria->id)->where('confraria_membro.deleted', 0)->get();
$valor = $valor / count($ConfrariaMembros);
$valor = number_format($valor, 2, '.', '');
foreach ($ConfrariaMembros as $membro) {
$cliente = $membro->cadastro;
$saldo = $valor + ($cliente->contaCorrente ? ($cliente->contaCorrente->saldo) : 0);
DB::table('conta_corrente')->insert([
[
'confraria_id' => NULL,
'cadastro_id' => $cliente->id,
'pedido_venda_id' => $pedidoVenda->id,
'data' => $data,
'data_validade' => $data_validade,
'tipo_movimento' => $tipoMovimento,
'valor' => $valor,
'saldo' => $saldo,
'observacao' => $observacao
]
]);
}
}else{
DB::table('conta_corrente')->insert([
[
'confraria_id' => $confraria_id,
'cadastro_id' => $cliente->id,
'pedido_venda_id' => $pedidoVenda->id,
'data' => $data,
'data_validade' => $data_validade,
'tipo_movimento' => $tipoMovimento,
'valor' => $valor,
'saldo' => $saldo,
'observacao' => $observacao
]
]);
}
}else{
Log::info('ContaCorrenteService::atualizarConta() => tipoMovimento == "E" && id_status_pedido_venda != 2 ou 7');
}
return true;
}
public static function calcularValor($total, $basicInfo, $tipo='cashback', $confraria = FALSE){
$valor = 0;
if(!$confraria){
$confraria = ConfrariaService::buscarConfrariaUsuarioLogado();
}
if($tipo == 'cashback'){
$valorCashback = $basicInfo->valor_cashback;
$percentualCashback = $basicInfo->percentual_cashback;
if($confraria){
$valorCashback = $basicInfo->valor_cashback_confraria;
$percentualCashback = $basicInfo->percentual_cashback_confraria;
}
$valor = ($valorCashback > 0 ? $valorCashback : ( ($total * $percentualCashback) / 100 ));
$valor = $valor > 0 ? $valor : 0;
$valor = number_format($valor, 2, '.', '');
}
return $valor;
}
}