<?php
namespace App\MDS\GreenPatioBundle\Controller;
use App\Entity\Supplier;
use App\MDS\GreenPatioBundle\Entity\CvrReservationInvoice;
use App\MDS\GreenPatioBundle\Entity\CvrReservationInvoiceItems;
use App\MDS\GreenPatioBundle\Entity\ReservationInvoice;
use App\MDS\GreenPatioBundle\Entity\ReservationInvoiceItems;
use App\MDS\GreenPatioBundle\Entity\ReservationLoungeDetails;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class ReservationsAdminServicesController extends AbstractController
{
/**
* @Route("/servicestathome/", name="reservations_greenpatio_services_stat_home")
* Formulario para consultar las estadisticas de los servicios
*/
public function servicesStatHomeAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$listSupplier = $em->getRepository(Supplier::class)->findAll();
return $this->render('MDS/GreenPatioBundle/reservations/services-stats.html.twig', array( 'listSupplier' => $listSupplier, 'data' => null, ));
}
/**
* @Route("/servicestatreq/", name="reservations_greenpatio_services_stat")
* Se consulta para un periodo dado los servicios de un proveedor
*/
public function createForecastAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$newRequest = $request->request->get('reservation_services_req');
$hoy = new \DateTime("now", NULL);
$dateStartReq = empty($newRequest['date_start']) ? $hoy : $newRequest['date_start'];
$dateEndReq = empty($newRequest['date_end']) ? $hoy : $newRequest['date_end'];
$supplierId = empty($newRequest['supplierId']) ? 'All' : $newRequest['supplierId'];
$data = array();
$data = $this->baseStatisticSupplier($dateStartReq, $dateEndReq, $supplierId);
$listSupplier = $em->getRepository(Supplier::class)->findAll();
// Poner la leyenda ($legend) y ($dataDonut) en funcion de la eleccion del status
$dataDonut = array();
$dataDonutTwo = array();
$dataDonutThree = array();
$dataDonutFour = array();
$legend = array();
$legendTwo = array();
$legendThree = array();
$legendFour = array();
foreach ($data['arrayFiles'] as $dataFile)
{
if (array_key_exists('invoice',$dataFile)){
$dataDonut[] = ['name'=> $dataFile['reservation']->getId(), 'value'=> $dataFile['invoice']['Calculos_Totales_Neto_Expediente']];
$legend[] = $dataFile['reservation']->getId();
}
}
$legend = array();
foreach ($data['arraySupToServ'] as $key => $dataSup)
{
if($key == 0){
$dataDonutTwo[] = ['name'=> 'Sin Proveedor', 'value'=> $dataSup['Calculos_Totales_Neto_Proveedor']];
$legendTwo[$key] = 'Sin Proveedor';
} else {
$dataDonutTwo[] = ['name'=> $dataSup['supplier']->getCompany(), 'value'=> $dataSup['Calculos_Totales_Neto_Proveedor']];
$legendTwo[$key] = $dataSup['supplier']->getCompany();
}
}
foreach ($data['arrayServToSup'] as $key => $dataServ)
{
switch ($key){
case 'Accommodation': // Alojamiento
$dataDonutThree[] = ['name'=> 'Alojamiento', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Alojamiento';
break;
case 'Activities': //Actividades
$dataDonutThree[] = ['name'=> 'Actividades', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Actividades';
break;
case 'Av': // AV
$dataDonutThree[] = ['name'=> 'Av', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Av';
break;
case 'Creative': //Creativo
$dataDonutThree[] = ['name'=> 'Creativo', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Creativo';
break;
case 'Cruise': //Crucero
$dataDonutThree[] = ['name'=> 'Crucero', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Crucero';
break;
case 'Entertainment': //Entretenimiento
$dataDonutThree[] = ['name'=> 'Entretenimiento', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Entretenimiento';
break;
case 'Gifts': // Regalos
$dataDonutThree[] = ['name'=> 'Regalos', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Regalos';
break;
case 'Guide': //Guía
$dataDonutThree[] = ['name'=> 'Guía', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Guía';
break;
case 'Itineraries': //Itinerarios
$dataDonutThree[] = ['name'=> 'Itinerarios', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Itinerarios';
break;
case 'Lounge': //Lounge -- No Aplica
$dataDonutThree[] = ['name'=> 'Salón', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Salón';
break;
case 'Menu': //Catering
$dataDonutThree[] = ['name'=> 'Catering', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Catering';
break;
case 'Others': //Otros
$dataDonutThree[] = ['name'=> 'Otros', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Otros';
break;
case 'Transport': //Transporte
$dataDonutThree[] = ['name'=> 'Transporte', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Transporte';
break;
case 'Technology': //Tecnología
$dataDonutThree[] = ['name'=> 'Tecnología', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Tecnología';
break;
case 'Assisstant': //Asistencia
$dataDonutThree[] = ['name'=> 'Asistencia', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'Asistencia';
break;
case 'DDR': //DDR
$dataDonutThree[] = ['name'=> 'DDR', 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = 'DDR';
break;
default:
$dataDonutThree[] = ['name'=> $key, 'value'=> $dataServ['Calculos_Totales_Neto_Catalogo']];
$legendThree[$key] = $key;
break;
}
}
foreach ($data['arrayLounges'] as $key => $dataSup)
{
if($key == 0){
$dataDonutFour[] = ['name'=> 'Advertencia: No se encontró información de la sala', 'value'=> $dataSup['Calculos_Totales_Neto_Sala']];
$legendFour[$key] = 'Advertencia: No se encontró información de la sala';
} else {
$dataDonutFour[] = ['name'=> $dataSup['Lounge']->getName(), 'value'=> $dataSup['Calculos_Totales_Neto_Sala']];
$legendFour[$key] = $dataSup['Lounge']->getName();
}
}
return $this->render('MDS/GreenPatioBundle/Statistics/invoice-statistics.html.twig',
array(
'listSupplier' => $listSupplier,
'data' => $data,
'desde' => $dateStartReq,
'hasta' => $dateEndReq,
'dataDonut' => $dataDonut,
'dataDonutTwo' => $dataDonutTwo,
'dataDonutThree' => $dataDonutThree,
'dataDonutFour' => $dataDonutFour,
'legend' => $legend,
'legendTwo' => $legendTwo,
'legendThree' => $legendThree,
'legendFour' => $legendFour,
)
);
}
/**
* @Route("/ocupacystatreq/", name="reservations_greenpatio_ocupacy_stat")
* Se consulta para un periodo dado la ocupacion de las salas
*/
public function createOcupacyForecastAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$newRequest = $request->request->get('reservation_services_req');
$hoy = new \DateTime("now", NULL);
$dateStartReq = empty($newRequest['date_start']) ? $hoy : $newRequest['date_start'];
$dateEndReq = empty($newRequest['date_end']) ? $hoy : $newRequest['date_end'];
$data = array();
$data = $this->baseStatisticOcupacy($dateStartReq, $dateEndReq);
$dataDonut = array();
$dataDonutTwo = array();
$legend = array();
$legendTwo = array();
$dataDonut[] = ['name'=> 'Lunes', 'value'=> $data['sizeDays']['Lunes']];
$legend[] = 'Lunes';
$dataDonut[] = ['name'=> 'Martes', 'value'=> $data['sizeDays']['Martes']];
$legend[] = 'Martes';
$dataDonut[] = ['name'=> 'Miercoles', 'value'=> $data['sizeDays']['Miercoles']];
$legend[] = 'Miercol';
$dataDonut[] = ['name'=> 'Jueves', 'value'=> $data['sizeDays']['Jueves']];
$legend[] = 'Jueves';
$dataDonut[] = ['name'=> 'Viernes', 'value'=> $data['sizeDays']['Viernes']];
$legend[] = 'Viernes';
$dataDonut[] = ['name'=> 'Sábado', 'value'=> $data['sizeDays']['Sábado']];
$legend[] = 'Sábado';
$dataDonut[] = ['name'=> 'Domingo', 'value'=> $data['sizeDays']['Domingo']];
$legend[] = 'Domingo';
$dataDonutTwo[] = ['name'=> 'Enero', 'value'=> $data['sizeMonths']['Enero']];
$legendTwo[] = 'Enero';
$dataDonutTwo[] = ['name'=> 'Febrero', 'value'=> $data['sizeMonths']['Febrero']];
$legendTwo[] = 'Febrero';
$dataDonutTwo[] = ['name'=> 'Marzo', 'value'=> $data['sizeMonths']['Marzo']];
$legendTwo[] = 'Marzo';
$dataDonutTwo[] = ['name'=> 'Abril', 'value'=> $data['sizeMonths']['Abril']];
$legendTwo[] = 'Abril';
$dataDonutTwo[] = ['name'=> 'Mayo', 'value'=> $data['sizeMonths']['Mayo']];
$legendTwo[] = 'Mayo';
$dataDonutTwo[] = ['name'=> 'Junio', 'value'=> $data['sizeMonths']['Junio']];
$legendTwo[] = 'Junio';
$dataDonutTwo[] = ['name'=> 'Julio', 'value'=> $data['sizeMonths']['Julio']];
$legendTwo[] = 'Julio';
$dataDonutTwo[] = ['name'=> 'Agosto', 'value'=> $data['sizeMonths']['Agosto']];
$legendTwo[] = 'Agosto';
$dataDonutTwo[] = ['name'=> 'Septiembre', 'value'=> $data['sizeMonths']['Septiembre']];
$legendTwo[] = 'Septiembre';
$dataDonutTwo[] = ['name'=> 'Octubre', 'value'=> $data['sizeMonths']['Octubre']];
$legendTwo[] = 'Octubre';
$dataDonutTwo[] = ['name'=> 'Noviembre', 'value'=> $data['sizeMonths']['Noviembre']];
$legendTwo[] = 'Noviembre';
$dataDonutTwo[] = ['name'=> 'Diciembre', 'value'=> $data['sizeMonths']['Diciembre']];
$legendTwo[] = 'Diciembre';
return $this->render('MDS/GreenPatioBundle/Statistics/ocupacy-statistics.html.twig',
array(
'data' => $data,
'desde' => $dateStartReq,
'hasta' => $dateEndReq,
'dataDonut' => $dataDonut,
'dataDonutTwo' => $dataDonutTwo,
'legend' => $legend,
'legendTwo' => $legendTwo,
)
);
}
private function baseStatisticSupplier($dateStartReq, $dateEndReq, $supplierId)
{
$em = $this->getDoctrine()->getManager();
$data = array();
$arraySupToServ = array();
$arrayServToSup = array();
$arrayFiles = array();
$arrayLounges = array();
// Inicializamos los totales de las reservas
$arrayFiles['CalculosTotales']['Neto'] = 0;
$arrayFiles['CalculosTotales']['Total'] = 0;
if (!empty($dateEndReq) and !empty($dateStartReq) and empty($yearReq) and empty($monthReq)){
$parameters = array( 'start' => $dateStartReq, 'end'=> $dateEndReq, 'facturado'=> 'Invoiced',);
$dql = "SELECT p
FROM App\MDS\GreenPatioBundle\Entity\Reservation p
WHERE p.dateStart BETWEEN :start AND :end AND p.status = :facturado
ORDER BY p.dateStart ASC
";
$query = $em->createQuery($dql)->setParameters($parameters);
$data = $query->getResult();
}
foreach ($data as $item){
// Arreglo de los expedientes
$invoice = $em->getRepository(ReservationInvoice::class)->findBy( array('reservationId'=>$item->getId()));
$itemsInvoice = $em->getRepository(ReservationInvoiceItems::class)->findBy( array('reservationId'=>$item->getId()));
if (empty($invoice)){
// Factura de Covarrubia
$invoice = $em->getRepository(CvrReservationInvoice::class)->findBy( array('reservationId'=>$item->getId()));
$itemsInvoice = $em->getRepository(CvrReservationInvoiceItems::class)->findBy( array('reservationId'=>$item->getId()));
}
$arrayFiles[$item->getId()]['reservation'] = $item;
foreach ($invoice as $elem){
$arrayFiles[$item->getId()]['invoice'][$elem->getId()] = $elem;
$arrayFiles[$item->getId()]['invoice']['Calculos_Totales_Neto_Expediente'] =
array_key_exists('Calculos_Totales_Neto_Expediente',$arrayFiles[$item->getId()]['invoice']) ?
($arrayFiles[$item->getId()]['invoice']['Calculos_Totales_Neto_Expediente'] + $elem->getTotalNet()) : $elem->getTotalNet();
$arrayFiles[$item->getId()]['invoice']['Calculos_Totales_Iva_Expediente'] =
array_key_exists('Calculos_Totales_Iva_Expediente',$arrayFiles[$item->getId()]['invoice']) ?
($arrayFiles[$item->getId()]['invoice']['Calculos_Totales_Iva_Expediente'] + $elem->getTotal()) : $elem->getTotal();
}
foreach ($itemsInvoice as $elem){ $arrayFiles[$item->getId()]['itemsInvoice'][$elem->getId()] = $elem; }
$arrayFiles['CalculosTotales']['Neto'] = $arrayFiles['CalculosTotales']['Neto'] + $invoice[0]->getTotalNet();
$arrayFiles['CalculosTotales']['Total'] = $arrayFiles['CalculosTotales']['Total'] + $invoice[0]->getTotal();
foreach ($itemsInvoice as $itemInv){
if($itemInv->getItemType() == 'SERVICE'){
$supplier = $em->getRepository(Supplier::class)->findOneById( $itemInv->getSrvSupplierId() );
$calculoNetoItem = $this->calculosItem($itemInv->getId(), 'N');
$calculoIvaItem = $this->calculosItem($itemInv->getId(), 'I');
if(!empty($supplier)){
// Arreglo de proveedor->servicios
$arraySupToServ[$supplier->getId()]['supplier'] = $supplier;
$arraySupToServ[$supplier->getId()]['services'][$itemInv->getId()]['item'] = $itemInv;
$arraySupToServ[$supplier->getId()]['services'][$itemInv->getId()]['CalculosTotales_Neto'] =
array_key_exists('CalculosTotales_Neto',$arraySupToServ[$supplier->getId()]['supplier']) ?
($arraySupToServ[$supplier->getId()]['supplier']['CalculosTotales_Neto'] + $calculoNetoItem) : $calculoNetoItem;
$arraySupToServ[$supplier->getId()]['services'][$itemInv->getId()]['CalculosTotales_Iva'] =
array_key_exists('CalculosTotales_Iva',$arraySupToServ[$supplier->getId()]['supplier']) ?
($arraySupToServ[$supplier->getId()]['supplier']['CalculosTotales_Iva'] + $calculoIvaItem) : $calculoIvaItem;
$arraySupToServ[$supplier->getId()]['Calculos_Totales_Neto_Proveedor'] =
array_key_exists('Calculos_Totales_Neto_Proveedor',$arraySupToServ[$supplier->getId()]) ?
($arraySupToServ[$supplier->getId()]['Calculos_Totales_Neto_Proveedor'] + $calculoNetoItem) : $calculoNetoItem;
$arraySupToServ[$supplier->getId()]['Calculos_Totales_Iva_Proveedor'] =
array_key_exists('Calculos_Totales_Iva_Proveedor',$arraySupToServ[$supplier->getId()]) ?
($arraySupToServ[$supplier->getId()]['Calculos_Totales_Iva_Proveedor'] + $calculoIvaItem) : $calculoIvaItem;
// Arreglo de servicios->proveedor
$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['supplier'] = $supplier;
$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['services'][] = $itemInv;
$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['CalculosTotales_Neto'] =
array_key_exists('CalculosTotales_Neto',$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]) ?
($arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['CalculosTotales_Neto'] + $calculoNetoItem) : $calculoNetoItem;
$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['CalculosTotales_Iva'] =
array_key_exists('CalculosTotales_Iva',$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]) ?
($arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['CalculosTotales_Iva'] + $calculoIvaItem) : $calculoIvaItem;
$arrayServToSup[$itemInv->getSrvServiceCatName()]['Calculos_Totales_Neto_Catalogo'] =
array_key_exists('Calculos_Totales_Neto_Catalogo',$arrayServToSup[$itemInv->getSrvServiceCatName()]) ?
($arrayServToSup[$itemInv->getSrvServiceCatName()]['Calculos_Totales_Neto_Catalogo'] + $calculoNetoItem) : $calculoNetoItem;
$arrayServToSup[$itemInv->getSrvServiceCatName()]['Calculos_Totales_Iva_Catalogo'] =
array_key_exists('Calculos_Totales_Iva_Catalogo',$arrayServToSup[$itemInv->getSrvServiceCatName()]) ?
($arrayServToSup[$itemInv->getSrvServiceCatName()]['Calculos_Totales_Iva_Catalogo'] + $calculoIvaItem) : $calculoIvaItem;
} else {
// Arreglo de proveedor->servicios
$arraySupToServ['0']['supplier'] = 'Sin Proveedor';
$arraySupToServ['0']['services'][$itemInv->getId()]['item'] = $itemInv;
$arraySupToServ['0']['services'][$itemInv->getId()]['CalculosTotales_Neto'] =
array_key_exists('CalculosTotales_Neto',$arraySupToServ['0']['services'][$itemInv->getId()]) ?
($arraySupToServ['0']['supplier']['CalculosTotales_Neto'] + $calculoNetoItem) : $calculoNetoItem;
$arraySupToServ['0']['services'][$itemInv->getId()]['CalculosTotales_Iva'] =
array_key_exists('CalculosTotales_Iva',$arraySupToServ['0']['services'][$itemInv->getId()]) ?
($arraySupToServ['0']['supplier']['CalculosTotales_Iva'] + $calculoIvaItem) : $calculoIvaItem;
$arraySupToServ['0']['Calculos_Totales_Neto_Proveedor'] =
array_key_exists('Calculos_Totales_Neto_Proveedor',$arraySupToServ['0']) ?
($arraySupToServ['0']['Calculos_Totales_Neto_Proveedor'] + $calculoNetoItem) : $calculoNetoItem;
$arraySupToServ['0']['Calculos_Totales_Iva_Proveedor'] =
array_key_exists('Calculos_Totales_Iva_Proveedor',$arraySupToServ['0']) ?
($arraySupToServ['0']['Calculos_Totales_Iva_Proveedor'] + $calculoIvaItem) : $calculoIvaItem;
// Arreglo de servicios->proveedor
$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['supplier'] = 'Sin Proveedor';
$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['services'][] = $itemInv;
$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['CalculosTotales_Neto'] =
array_key_exists('CalculosTotales_Neto',$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]) ?
($arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['CalculosTotales_Neto'] + $calculoNetoItem) : $calculoNetoItem;
$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['CalculosTotales_Iva'] =
array_key_exists('CalculosTotales_Iva',$arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]) ?
($arrayServToSup[$itemInv->getSrvServiceCatName()][$itemInv->getId()]['CalculosTotales_Iva'] + $calculoIvaItem) : $calculoIvaItem;
$arrayServToSup[$itemInv->getSrvServiceCatName()]['Calculos_Totales_Neto_Catalogo'] =
array_key_exists('Calculos_Totales_Neto_Catalogo',$arrayServToSup[$itemInv->getSrvServiceCatName()]) ?
($arrayServToSup[$itemInv->getSrvServiceCatName()]['Calculos_Totales_Neto_Catalogo'] + $calculoNetoItem) : $calculoNetoItem;
$arrayServToSup[$itemInv->getSrvServiceCatName()]['Calculos_Totales_Iva_Catalogo'] =
array_key_exists('Calculos_Totales_Iva_Catalogo',$arrayServToSup[$itemInv->getSrvServiceCatName()]) ?
($arrayServToSup[$itemInv->getSrvServiceCatName()]['Calculos_Totales_Iva_Catalogo'] + $calculoIvaItem) : $calculoIvaItem;
}
}
// Arreglo de las salas
if($itemInv->getItemType() == 'LOUNGE'){
$arrayLounges[$itemInv->getLngIdLounge()]['IdLounge'] = $itemInv->getLngIdLounge();
$loungeDetails = $em->getRepository(ReservationLoungeDetails::class)->findOneById( $itemInv->getLngIdLounge() );
$arrayLounges[$itemInv->getLngIdLounge()]['Lounge'] = empty($loungeDetails) ? 'No se encontró información de la sala' : $loungeDetails;
$arrayLounges[$itemInv->getLngIdLounge()]['ItemSold'][$itemInv->getId()]['item'] = $itemInv;
$arrayLounges[$itemInv->getLngIdLounge()]['ItemSold'][$itemInv->getId()]['CalculosTotales_Neto'] = $itemInv->getLngServicePrice();
if (strpos($itemInv->getLngServicePrice(), ',') !== false) {
$itemInv->setLngServicePrice(str_replace(',', '.', $itemInv->getLngServicePrice()));
}
$arrayLounges[$itemInv->getLngIdLounge()]['ItemSold'][$itemInv->getId()]['CalculosTotales_Iva'] = $itemInv->getLngServicePrice() * 1.21;
$arrayLounges[$itemInv->getLngIdLounge()]['Calculos_Totales_Neto_Sala'] =
array_key_exists('Calculos_Totales_Neto_Sala',$arrayLounges[$itemInv->getLngIdLounge()]) ?
($arrayLounges[$itemInv->getLngIdLounge()]['Calculos_Totales_Neto_Sala'] + $itemInv->getLngServicePrice()) : $itemInv->getLngServicePrice();
$arrayLounges[$itemInv->getLngIdLounge()]['Calculos_Totales_Iva_Sala'] =
array_key_exists('Calculos_Totales_Iva_Sala',$arrayLounges[$itemInv->getLngIdLounge()]) ?
($arrayLounges[$itemInv->getLngIdLounge()]['Calculos_Totales_Iva_Sala'] + ($itemInv->getLngServicePrice() * 1.21) ) : ($itemInv->getLngServicePrice() * 1.21);
}
}
}
$data = array(
'arrayFiles' => $arrayFiles,
'arraySupToServ' => $arraySupToServ,
'arrayServToSup' => $arrayServToSup,
'arrayLounges' => $arrayLounges,
);
return $data;
}
private function calculosItem($id, $type){
$em = $this->getDoctrine()->getManager();
$item = $em->getRepository(ReservationInvoiceItems::class)->findOneById( $id );
switch ($item->getSrvServiceCatId()){
case 1: // Alojamiento
$numNoches = (($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days;
// La personas no afectan este calculo
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $numNoches * $item->getSrvUnits();
break;
case 2: //Actividades
// El número de personas es considerado en el calculo
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $item->getSrvUnits();
break;
case 3: // AV
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 4: //Creative
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 5: //Cruise
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 6: //Entertaiment
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 7: // Gifts
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = 1;
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 8: //Guide
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 9: //Itineraries
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 10: //Lounge -- No Aplica
$neto = 0; break;
case 11: //Menu
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 12: //Others
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 13: //Transport
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 14: //Technology
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = 1;
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 15: //Assisstant
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
case 16: //DDR
$pax = $item->getSrvPax();
if (empty($pax) or $pax == "0") { $pax = 1; }
$days = ((($item->getSrvDateOutAt())->diff($item->getSrvDateInAt()))->days + 1);
$unitsServ = $item->getSrvUnits();
if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
$price = $item->getSrvPrice();
$opCom = (empty($item->getSrvOpCommission()) or ($item->getSrvOpCommission() == '0')) ? -1 : 1;
$com = $item->getSrvCommission() * $opCom;
$price = $price + (($price * $com)/100);
$opOver = (empty($item->getSrvOpOver()) or ($item->getSrvOpOver() == '0')) ? -1 : 1;
$over = $item->getSrvOver() * $opOver;
$price = $price + $over;
$neto = $price * $days * $unitsServ * $pax;
break;
default:
$neto = 0;
break;
}
if ($type == 'N'){
return $neto;
} else {
$opIva = ($item->getSrvOpIva() == '0') ? -1 : 1;
$iva = (empty($item->getSrvIva())) ? 21 : $item->getSrvIva();
$iva = $iva * $opIva;
// Aplicamos el IVA
$neto = $neto + (($neto * $iva)/100);
return $neto;
}
}
private function baseStatisticOcupacy($dateStartReq, $dateEndReq)
{
$em = $this->getDoctrine()->getManager();
$data = array();
// Arreglo de reservas facturadas, agrupado por dias
$arrayDays = array(
'Lunes' => array(),
'Martes' => array(),
'Miercoles' => array(),
'Jueves' => array(),
'Viernes' => array(),
'Sábado' => array(),
'Domingo' => array(),
);
// Arreglo de reservas facturadas, agrupado por meses
$arrayMonths = array(
'Enero' => array(),
'Febrero' => array(),
'Marzo' => array(),
'Abril' => array(),
'Mayo' => array(),
'Junio' => array(),
'Julio' => array(),
'Agosto' => array(),
'Septiembre' => array(),
'Octubre' => array(),
'Noviembre' => array(),
'Diciembre' => array(),
);
if (!empty($dateEndReq) and !empty($dateStartReq)){
$parameters = array( 'start' => $dateStartReq, 'end'=> $dateEndReq, 'facturado'=> 'Invoiced',);
$dql = "SELECT p
FROM App\MDS\GreenPatioBundle\Entity\Reservation p
WHERE p.dateStart BETWEEN :start AND :end AND p.status = :facturado
ORDER BY p.dateStart ASC
";
$query = $em->createQuery($dql)->setParameters($parameters);
$data = $query->getResult();
}
foreach ($data as $item){
// Arreglo de los expedientes
$invoice = $em->getRepository(ReservationInvoice::class)->findBy( array('reservationId'=>$item->getId()));
$itemsInvoice = $em->getRepository(ReservationInvoiceItems::class)->findBy( array('reservationId'=>$item->getId()));
if (empty($invoice)){
// Factura de Covarrubia
$invoice = $em->getRepository(CvrReservationInvoice::class)->findBy( array('reservationId'=>$item->getId()));
$itemsInvoice = $em->getRepository(CvrReservationInvoiceItems::class)->findBy( array('reservationId'=>$item->getId()));
}
foreach ($itemsInvoice as $elem){
if (!empty($elem->getLngDateStart())) {
$fecha = $elem->getLngDateStart()->format('Y-m-d');
$dia_de_semana = date('N', strtotime($fecha));
switch ($dia_de_semana) {
case 1: //d('Lunes');
if (!empty($elem->getLngLoungeName())){ $arrayDays['Lunes'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 2: //d('Martes');
if (!empty($elem->getLngLoungeName())){ $arrayDays['Martes'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 3: //d('Miércoles');
if (!empty($elem->getLngLoungeName())){ $arrayDays['Miercoles'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 4: //d('Jueves');
if (!empty($elem->getLngLoungeName())){ $arrayDays['Jueves'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 5: //d('Viernes');
if (!empty($elem->getLngLoungeName())){ $arrayDays['Viernes'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 6: //d('Sábado');
if (!empty($elem->getLngLoungeName())){ $arrayDays['Sábado'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 7: //d('Domingo');
if (!empty($elem->getLngLoungeName())){ $arrayDays['Domingo'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
default: //d('Error al calcular el día');
break;
}
$mes = $elem->getLngDateStart()->format('m');
switch ($mes) {
case 1: //d('Enero');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Enero'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 2: //d('Febrero');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Febrero'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 3: //d('Marzo');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Marzo'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 4: //d('Abril');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Abril'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 5: //d('Mayo');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Mayo'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 6: //d('Junio');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Junio'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 7: //d('Julio');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Julio'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 8: //d('Agosto');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Agosto'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 9: //d('Septiembre');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Septiembre'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 10: //d('Octubre');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Octubre'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 11: //d('Noviembre');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Noviembre'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
case 12: //d('Diciembre');
if (!empty($elem->getLngLoungeName())){ $arrayMonths['Diciembre'][] = array( 'reservationId' => $item->getId(), 'title' => $item->getTitle(), 'clientName' => $invoice[0]->getClientName(), 'nameLounge' => $elem->getLngLoungeName(),); }
break;
default: //d('Error al calcular el mes');
break;
}
}
}
}
$sizeDays = array(
'Lunes' => sizeof($arrayDays['Lunes']),
'Martes' => sizeof($arrayDays['Martes']),
'Miercoles' => sizeof($arrayDays['Miercoles']),
'Jueves' => sizeof($arrayDays['Jueves']),
'Viernes' => sizeof($arrayDays['Viernes']),
'Sábado' => sizeof($arrayDays['Sábado']),
'Domingo' => sizeof($arrayDays['Domingo']),
);
arsort($sizeDays); // Ordenamos en funcion de los dias de ocupacion
$arraySorted = array();
foreach ($sizeDays as $key => $item){ $arraySorted[$key] = $arrayDays[$key]; }
$arrayDays = $arraySorted;
$sizeMonths = array(
'Enero' => sizeof($arrayMonths['Enero']),
'Febrero' => sizeof($arrayMonths['Febrero']),
'Marzo' => sizeof($arrayMonths['Marzo']),
'Abril' => sizeof($arrayMonths['Abril']),
'Mayo' => sizeof($arrayMonths['Mayo']),
'Junio' => sizeof($arrayMonths['Junio']),
'Julio' => sizeof($arrayMonths['Julio']),
'Agosto' => sizeof($arrayMonths['Agosto']),
'Septiembre' => sizeof($arrayMonths['Septiembre']),
'Octubre' => sizeof($arrayMonths['Octubre']),
'Noviembre' => sizeof($arrayMonths['Noviembre']),
'Diciembre' => sizeof($arrayMonths['Diciembre']),
);
arsort($sizeMonths); // Ordenamos en funcion de los dias de ocupacion
$arraySorted = array();
foreach ($sizeMonths as $key => $item){ $arraySorted[$key] = $arrayMonths[$key]; }
$arrayMonths = $arraySorted;
$data = array(
'arrayDays' => $arrayDays,
'arrayMonths' => $arrayMonths,
'sizeDays' => $sizeDays,
'sizeMonths' => $sizeMonths,
);
return $data;
}
};