/home/dvjjulio/test.istyle.mx/app/Http/Controllers/ComisionesController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Venta;
use App\Cliente;
use App\Comision;
use Uuid;
use Auth;
use App\Helper;
use App\Http\Controllers\ComisionPagoController;
use App\Nivel;
class ComisionesController extends Controller
{
//
public function index()
{
$clientesI = new Cliente();
$clientes = $clientesI->Clientes();
$redes = new Venta();
$years = $redes->monthYearVenta();
// $months = $redes->monthYearVenta(date('Y'));
$months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
// $clientes = Cliente::where('status_id', 1)->get();
/* $redController = new RedController();
$red = [];
$comisiones = [];
$total = 0;
$comision = 0;
$red_size = 0;
$message = "";
$year = date('Y');
$month = date('m');
foreach ($clientes as $key => $value) {
$compra = $redes->cliente_compra($value->id);
$ids = '"'.$value->id.'"';
for($i = 1; $i<= 4; $i++){
$red_first = $redes->red_first($ids,$i);
if(isset($red_first)){
$ids = $redController->get_ids($red_first);
$red[$i] = $red_first;
foreach($red_first as $val){
if($val->total < 4000 | !$val->comisiona){
$comision += 0;
}else{
$comision += $val->comision;
}
$red_size++;
$total += $val->total;
}
}else{
break;
}
} */
/*if($comision >= 10000){
$frontales = $redController->afterTen($value->id,$year,$month);
if($frontales < 5){
$message = "Necesitas tus 5 frontales con venta para tu comisi贸n completa";
$comision = 0;
$ids = '"'.$value->id.'"';
$front = 1;
for($i = 1; $i<= 2; $i++){
$red_first = $redes->red_first($ids,$i);
if(isset($red_first)){
$ids = $redController->get_ids($red_first);
foreach($red_first as $val){
if($val->total >= 4000){
if($front <= $frontales){
$comision += $val->comision;
$front++;
}
}
}
$front = 1;
}
}
}
}
if($comision != 0){
$comisiones[$key] = [ 'cliente'=> $value->nombre." ".$value->ape_p." ".$value->ape_m, 'tel'=> $value->tel, 'id'=>$value->id, 'pagado' => $value->pagado, 'comision'=>$comision, 'total' => $total,
'compra'=>$compra, 'message' => $message ];
}
} */
$comision = new Comision();
$comisiones = $comision->existPay(null, null, null);
$totalPagado = $comision->totalPagado(null, null, null);
$totalPagado = $totalPagado[0]->total;
$data = ['years' => $years, 'months' => $months];
return view('Catalogos.Comisiones')->with(compact('comisiones', 'clientes', 'data'));
}
public function getComisiones(Request $request)
{
$data = $request->all();
$comision = new Comision();
$comisiones = $comision->existPay($data['cliente'], $data['year'], $data['month']);
$totalPagado = $comision->totalPagado($data['year'], $data['month'], $data['cliente']);
$totalPagado = $totalPagado[0]->total;
return view('Catalogos.sectionComisiones')->with(compact('comisiones', 'totalPagado'));
}
public function getComisiones_updated(Request $request)
{
$data = $request->all();
$redes = new Venta();
$comisiones_ = new Comision();
if ($data['cliente'] != "vacio") {
$clientesI = new Cliente();
$clientes = $clientesI->Clientes($data['cliente']);
} else {
$clientes = Cliente::where('status_id', 1)->OrderBy('nombre')->get();
}
$year = $data['year'];
$month = $data['month'];
$redController = new RedController();
$red = [];
$comisiones = [];
foreach ($clientes as $key => $value) {
$total = 0;
$comision = 0;
$red_size = 0;
$message = "";
$compra = $redes->cliente_compra($value->id, $year, $month);
$ids = '"' . $value->id . '"';
for ($i = 1; $i <= 4; $i++) {
$red_first = $redes->red_first($ids, $i, $month, $year);
if (isset($red_first)) {
$ids = $redController->get_ids($red_first);
$red[$i] = $red_first;
foreach ($red_first as $val) {
if ($val->total < 4000 | !$val->comisiona) {
$comision += 0;
} else {
$comision += $val->comision;
}
$red_size++;
$total += $val->total;
}
} else {
break;
}
}
if ($total >= 400000 || $value->nivel == 2) {
$redController->checkLevel($value->id, 2);
$frontales = $redController->afterTen($value->id, $year, $month);
if ($frontales < 10) {
$message = "Necesitas tus 10 frontales con venta para tu comisi贸n completa";
$comision = 0;
$ids = '"' . $value->id . '"';
$front = 1;
for ($i = 1; $i <= 2; $i++) {
$red_first = $redes->red_first($ids, $i, $month, $year);
if (isset($red_first)) {
$ids = $redController->get_ids($red_first);
foreach ($red_first as $val) {
if ($val->total >= 4000) {
if ($front <= $frontales) {
$comision += $val->comision;
$front++;
}
}
}
$front = 1;
}
}
}
} else if ($comision >= 10000 || $value->nivel == 1) {
$redController->checkLevel($value->id, 1);
$frontales = $redController->afterTen($value->id, $year, $month);
if ($frontales < 5) {
$message = "Necesitas tus 5 frontales con venta para tu comisi贸n completa";
$comision = 0;
$ids = '"' . $value->id . '"';
$front = 1;
for ($i = 1; $i <= 2; $i++) {
$red_first = $redes->red_first($ids, $i, $month, $year);
if (isset($red_first)) {
$ids = $redController->get_ids($red_first);
foreach ($red_first as $val) {
if ($val->total >= 4000) {
if ($front <= $frontales) {
$comision += $val->comision;
$front++;
}
}
}
$front = 1;
}
}
}
}
if ($comision != 0) {
$comision_ = $comisiones_->existPay($value->id, $year, $month);
$comisiones[$key] = [
'cliente' => $value->nombre . " " . $value->ape_p . " " . $value->ape_m,
'tel' => $value->tel,
'id' => $value->id,
'pagado' => (isset($comision_)) ? $comision_[0]->pagado : null,
'comision' => $comision,
'total' => $total,
'compra' => $compra,
'message' => $message
];
}
}
$totalPagado = $comisiones_->totalPagado($year, $month, $data['client']);
$totalPagado = $totalPagado[0]->total;
return view('Catalogos.sectionComisiones')->with(compact('comisiones', 'totalPagado'));
}
public function payComisiones(Request $request)
{
$data = $request->all();
$comisiones = new Comision();
$exist = $comisiones->existPay($data['cliente_id'], $data['year'], $data['month']);
if (!isset($exist)) {
$comisiones->id = Uuid::generate()->string;
} else {
$comisiones = Comision::find($exist[0]->id);
}
$comisiones->cliente_id = $data['cliente_id'];
$comisiones->ano = $data['year'];
$comisiones->mes = $data['month'];
$comisiones->venta = $data['venta'];
$comisiones->comision = $data['comision'];
$comisiones->pagado = $data['pay'];
$comisiones->created_by = Auth::user()->id;
if ($comisiones->save()) {
$comisionPaid = $comisiones->updateComisionPagado($data['cliente_id'], $data['year'], $data['month'], $data['pay']);
echo $comisionPaid;
return response()->json(['status' => "success", 'message' => 'Pago guardado']);
} else {
return response()->json(['status' => "error", 'message' => 'Error al Guardar']);
}
}
public function getMonths(Request $request)
{
$year = $request->input('year');
$redes = new Venta();
$months = $redes->monthYearVenta($year);
$months_select = "<option value=''>Selecciona</option>";
foreach ($months as $month) {
$months_select .= "<option value='" . $month->mes . "'>" . Helper::month($month->mes) . "</option>";
}
return $months_select;
}
public function generateComisiones($client = null, $year, $month)
{
$data = "";
$redes = new Venta();
$comisiones_ = new Comision();
if ($client != "" || $client != null) {
$clientesI = new Cliente();
$clientes = $clientesI->Clientes($client);
} else {
$clientes = Cliente::where('status_id', 1)->OrderBy('nombre')->get();
}
if ($year == null) $year = date('Y');
if ($month == null) $month = date('m');
$redController = new RedController();
$red = [];
$comisiones = [];
foreach ($clientes as $key => $value) {
$total = 0;
$comision = 0;
$red_size = 0;
$message = "";
$cantidad = 0;
$compra = $redes->cliente_compra($value->id, $year, $month);
$ids = '"'.$value->id.'"';
for($i = 1; $i<= 4; $i++){
$red_first = $redes->red_first($ids,$i,$month,$year);
if(isset($red_first)){
$ids = $redController->get_ids($red_first);
$red[$i] = $red_first;
foreach($red_first as $val){
if ($val->total >= 4000 && $val->comisiona){
$comision += $val->comision;
}
$red_size++;
$total += $val->total;
$cantidad += $val->cantidad;
}
}else{
break;
}
}
if($comision >= 400000 || $value->nivel == 2){
$redController->checkLevel($value->id,2);
$frontales = $redController->afterTen($value->id,$year,$month);
if($frontales < 10){
$message = "Necesitas tus 10 frontales con venta para tus activos";
$comisionType = Helper::getComisionCountry($value->pais);
$firstLevel = Nivel::where('nivel', 'Primer')->first();
$comision = $frontales * $firstLevel->$comisionType;
$ids = '"'.$value->id.'"';
$front = 1;
for($i = 1; $i<= 2; $i++){
$red_first = $redes->red_first($ids,$i,$month,$year);
if(isset($red_first)){
$ids = $redController->get_ids($red_first);
foreach($red_first as $val){
if($val->total >= 4000){
if($front <= $frontales){
// $comision += $val->comision;
$secondLevel = Nivel::where('nivel', 'Segundo')->first();
$comision += $val->nivel === 'Segundo' ? $secondLevel->$comisionType : 0;
$cantidad += $val->cantidad;
$front++;
}
}
}
$front = 1;
}
}
}
}else if(($comision >= 10000 && $comision <= 400000) || $value->nivel == 1){
$redController->checkLevel($value->id, 1);
$frontales = $redController->afterTen($value->id,$year,$month);
if($frontales < 5){
$message = "Necesitas tus 5 frontales con venta para tus activos";
$comisionType = Helper::getComisionCountry($value->pais);
$firstLevel = Nivel::where('nivel', 'Primer')->first();
$comision = $frontales * $firstLevel->$comisionType;
$ids = '"'.$value->id.'"';
$front = 1;
for($i = 1; $i<= 2; $i++){
$red_first = $redes->red_first($ids,$i,$month,$year);
if(isset($red_first)){
$ids = $redController->get_ids($red_first);
foreach($red_first as $val){
if($val->total >= 4000){
if($front <= $frontales){
$secondLevel = Nivel::where('nivel', 'Segundo')->first();
$comision += $val->nivel === 'Segundo' ? $secondLevel->$comisionType : 0;
// $comision += $val->comision;
$cantidad += $val->cantidad;
$front++;
}
}
}
$front = 1;
}
}
}
}
$total_comision = $redes->Get_3_Months($value->id, $year, $month);
if($comision != 0 || $total_comision[0]->comision != 0){
$comision_ = $comisiones_->existPay($value->id, $year, $month);
// $total_comision = $redes->Get_3_Months($value->id, $year, $month);
$comision_3_meses = 0;
if (isset($total_comision)) {
$comision_3_meses = $total_comision[0]->comision;
}
$comisiones[$key] = [
'cliente'=> $value->nombre." ".$value->ape_p." ".$value->ape_m, 'tel'=> $value->tel,
'id' => $value->id,
'pagado' => (isset($comision_))? $comision_[0]->pagado : null,
'comision'=>$comision,
'comision_3meses' => $comision_3_meses,
'total' => $total,
'compra' => $compra,
'message' => ($compra) ? $message : 'NO TIENE DERECHO A ACTIVOS!'."<br />". $message,
'year' => $year,
'month' => $month,
'cantidad' => $cantidad
];
}
}
$totalPagado = $comisiones_->totalPagado($year, $month, $client);
$totalPagado = $totalPagado[0]->total;
return $comisiones;
}
public function insertComisionesTerminal($clientId = null, $year = null, $month = null)
{
set_time_limit(300);
// $info = $request->all();
$data = $this->generateComisiones($clientId, $year, $month);
// $data = array_slice($data, 0, 4);
$comision_ = new Comision();
foreach ($data as $key => $client) {
$exist = $comision_->checkComisionUpdate($client['id'], null, $client['year'], $client['month'], $client['comision_3meses']);
if ($exist) {
if ($exist[0]->cliente_id == $client['id'] && $exist[0]->comision != $client['comision'] || $exist[0]->venta != $client['total'] || $exist[0]->comentarios != $client['message'] || $exist[0]->comision_3meses != $client['comision_3meses']) {
$comision = Comision::find($exist[0]->id);
$comision->venta = $client['total'];
$comision->comision = $client['comision'];
$comision->cantidad = $client['cantidad'];
$comision->comentarios = $client['message'];
$comision->comision_3meses = ($client['comision_3meses'] ? $client['comision_3meses'] : 0);
if ($comision->save()) {
echo 'saved correctly';
} else {
echo 'error to save';
}
} else {
echo 'same';
}
} else {
$comision = new Comision();
$comision->id = Uuid::generate()->string;
$comision->cliente_id = $client['id'];
$comision->ano = $client['year'];
$comision->mes = $client['month'];
$comision->venta = $client['total'];
$comision->comision = $client['comision'];
$comision->cantidad = $client['cantidad'];
$comision->comentarios = $client['message'];
$comision->comision_3meses = ($client['comision_3meses'] ? $client['comision_3meses'] : 0);
$comision->pagado = 0;
$comision->status_id = 1;
$comision->created_by = 'f3b078a0-5907-11e8-9745-4770ebde3703';
if ($comision->save()) {
echo 'saved correctly';
} else {
echo 'error to save';
}
}
}
}
public function insertComisiones(Request $request)
{
set_time_limit(300);
$info = $request->all();
$data = $this->generateComisiones($info["clientId"], $info['year'], $info['month']);
// $data = array_slice($data, 0, 4);
$comision_ = new Comision();
foreach ($data as $key => $client) {
$exist = $comision_->checkComisionUpdate($client['id'], null, $client['year'], $client['month'], $client['comision_3meses']);
if ($exist) {
if ($exist[0]->cliente_id == $client['id'] && $exist[0]->comision != $client['comision'] || $exist[0]->venta != $client['total'] || $exist[0]->comentarios != $client['message'] || $exist[0]->comision_3meses != $client['comision_3meses']) {
$comision = Comision::find($exist[0]->id);
$comision->venta = $client['total'];
$comision->comision = $client['comision'];
$comision->cantidad = $client['cantidad'];
$comision->comentarios = $client['message'];
$comision->comision_3meses = ($client['comision_3meses'] ? $client['comision_3meses'] : 0);
if ($comision->save()) {
echo 'saved correctly';
} else {
echo 'error to save';
}
} else {
echo 'same';
}
} else {
$comision = new Comision();
$comision->id = Uuid::generate()->string;
$comision->cliente_id = $client['id'];
$comision->ano = $client['year'];
$comision->mes = $client['month'];
$comision->venta = $client['total'];
$comision->comision = $client['comision'];
$comision->cantidad = $client['cantidad'];
$comision->comentarios = $client['message'];
$comision->comision_3meses = ($client['comision_3meses'] ? $client['comision_3meses'] : 0);
$comision->pagado = 0;
$comision->status_id = 1;
$comision->created_by = 'f3b078a0-5907-11e8-9745-4770ebde3703';
if ($comision->save()) {
echo 'saved correctly';
} else {
echo 'error to save';
}
}
}
}
public function updateGastoComision($client_id, $venta_id, $cantidad)
{
$venta = Venta::where('id', $venta_id)->first();
$redes = new Venta();
$date = \DateTime::createFromFormat("Y-m-d", $venta->fecha_venta);
$year = $date->format("Y") ?? date('Y');
$month = $date->format("m") ?? date('m');
$getMonthsComision = $redes->Get_3_Months($client_id, $year, $month);
return $this->iteratePreviousMonths($client_id, $getMonthsComision, $cantidad, $venta_id);
}
public function iteratePreviousMonths($client_id, $getMonthsComision, $cantidad, $venta_id)
{
$monts = ['firstMonth', 'secondMonth', 'thirdMonth'];
$comisionPago = new ComisionPagoController();
foreach ($monts as $value) {
$comision = $this->getComision($client_id, $getMonthsComision[0]->$value);
if ($comision && $cantidad > 0) {
$restanteComision = ($comision['comision'] - $comision['comision_pagada']);
if ($restanteComision > 0) {
if ($cantidad > $restanteComision) {
$comision->comision_pagada = $comision['comision_pagada'] + $restanteComision;
if (!$comision->save()) return ['status' => false, 'message' => "saving Comision month: $value canidad: $restanteComision"];
if (!$comisionPago->guardar($client_id, $venta_id, $restanteComision, $comision->id)) return ['status' => false, 'message' => "saving ComisionPago month: $value canidad: $restanteComision"];
} else {
if ($cantidad > 0) {
$comision->comision_pagada = $comision['comision_pagada'] + $cantidad;
if (!$comision->save()) return ['status' => false, 'message' => "saving Comision month: $value canidad: $restanteComision"];
if (!$comisionPago->guardar($client_id, $venta_id, $cantidad, $comision->id)) return ['status' => false, 'message' => "saving ComisionPago month: $value canidad: $restanteComision"];
return ['status' => true];
}
}
$cantidad = $cantidad - $restanteComision;
}
}
}
return ['status' => true];
}
public function getComision($client_id, $date)
{
$date = \DateTime::createFromFormat("Y-m-d", $date);
return Comision::where('cliente_id', $client_id)
->where('ano', $date->format("Y"))
->where('mes', $date->format("m"))
->where('comision', '>', 0)
->where('status_id', 1)
->first();
}
public function updateComisionGasto($comision_id, $cantidad)
{
$comision = Comision::where('id', $comision_id)->first();
$restoComisionPagada = $comision->comision_pagada - $cantidad;
$comision->comision_pagada = $restoComisionPagada;
if ($comision->save()) {
return true;
} else {
return false;
}
}
}