<?php 
$controller = 'Register';
$action = '';
if(isset($_POST['action'])){
    $action = $_POST['action'];
    if (isset($_POST['id'])) {$id = $_POST['id'];}
}elseif(isset($_GET['action'])){
    $action = $_GET['action'];
    if (isset($_GET['id'])) {$id = $_GET['id'];}
}
include $_SERVER["DOCUMENT_ROOT"].'/app/include/bootstrap.php';
$_form = new AperturaCierreCajaForm();
$_caja = new AperturaCierreCajaEntity();
$_listaCajas = $_caja->getListaCajas();

/* Este parametro se envia desde Controller POS.php cuando caja aun no esta abierta para vender*/
if(isset($_GET['r'])){
    $flashmessenger->addMessage(array('info'=>'Es necesario registrar apertura de caja para iniciar venta.'));
}

/* Este parametro se envia desde Controller Waste.php cuando caja aun no esta abierta para mermar*/
if(isset($_GET['w'])){
    $flashmessenger->addMessage(array('danger'=>'Es necesario registrar apertura de caja para registrar merma.'));
}

switch($action){
    case 'abrir':
        /*Solo cuando */
        if(isset($_POST['idCaja'])){
            $_form->setActionController('abrir');
            $_form->deleteElement('efectivoFinal');
            $_form->deleteElement('tarjetasFinal');
            $_form->deleteElement('chequesFinal');
            $_form->deleteElement('electronicoFinal');
            $_form->deleteElement('doorDashFinal');
            $_form->deleteElement('waste_lbs');
            $_form->deleteElement('waste_pza');
            $login = new Login();
            
            #if($login->getRole() === '1'){
                $_form->deleteElement('autorizacion_usuario');
                $_form->deleteElement('autorizacion_password');
            #}
            
            $_form->populate($_POST);
            if($_form->isValid()){
                $_caja->setOptions($_POST);
                $result = $_caja->save($_caja->getOptions());
                if($result){
                    #Para vaciar formulario despues de insertar, ya que no puedo direccionar, porque sino, no se imprime ticket de apertura
                    $_form->populate(array('idCaja'=>'0','efectivoInicial'=>''));
                    $flashmessenger->addMessage(array('success'=>'Caja abierta exitosamente.'));
                    $_idAperturaCaja = $_caja->getLastInsertId();
                    if($login->isRegister()){
                        $_listaCajas = $_caja->getListaCajas();
                        $_printTicketApertura = true;
                        $vista = 'AperturaCierreCaja.php';
                        include $root.'/View/Template.php';
                        /*En AperturaCierreCaja.php se imprime ticket de apertura*/
                    }else{
                        header('Location: Register.php');
                    }                
                }else{
                    $vista = 'AperturaCierreCaja.php';
                    include $root . '/View/Template.php';
                }
            }else{
                $vista = 'AperturaCierreCaja.php';
                include $root.'/View/Template.php';
            }        
        }else{
            $_form->setActionController('abrir');
            $_form->deleteElement('efectivoFinal');
            $_form->deleteElement('tarjetasFinal');
            $_form->deleteElement('chequesFinal');
            $_form->deleteElement('electronicoFinal');
            $_form->deleteElement('doorDashFinal');
            $_form->deleteElement('waste_lbs');
            $_form->deleteElement('waste_pza');

            #$login = new Login();
            #if($login->getRole() === '1'){
                $_form->deleteElement('autorizacion_usuario');
                $_form->deleteElement('autorizacion_password');
            #}
            $vista = 'AperturaCierreCaja.php';
            include $root.'/View/Template.php';
        }
        break;   
        
    case 'edit':
        if($_GET){$_registerData = $_caja->getById($id);}
        if($_POST){$_registerData = $_POST;}
        
        #Setea Id y vuelve a generar elementos, para que en getListCajas tenga disponible id.
        $_form->setId($id);
        $_form->setActionController('edit');
        $_form->init();
        
        $login = new Login();
        /*
        $permisoEditar = null;
        if($_registerData['creado_por'] == $login->getId() || $login->getRole() == '1'){$permisoEditar = true;}
        
        if(!$permisoEditar){
            $flashmessenger->addMessage(array('info'=>'No tienes permiso para acceder a este modulo.'));
            header('Location: Home.php');
        }*/
        
        #if($login->getRole() === '1'){
            $_form->deleteElement('autorizacion_usuario');
            $_form->deleteElement('autorizacion_password');
        #}        
        
        if($_registerData['status'] == '1'){
            $_form->deleteElement('efectivoFinal');
            $_form->deleteElement('tarjetasFinal');
            $_form->deleteElement('chequesFinal');
            $_form->deleteElement('electronicoFinal');
            $_form->deleteElement('doorDashFinal');
            $_form->deleteElement('waste_lbs');
            $_form->deleteElement('waste_pza');
        }      
        
        $_form->populate($_registerData);
        
        if(isset($_POST['id'])){
            if($_form->isValid()){
                $_caja->setOptions($_registerData);
                $result = $_caja->update($id,$_caja->getOptions()); //no tengo id porque viene de post
                if($result){
                    $flashmessenger->addMessage(array('success'=>'Caja actualizado exitosamente.'));
                    header("Location: Register.php?action=edit&id=$id");
                }else{
                    $flashmessenger->addMessage(array('danger'=>'Error. Intenta nuevamente o contacta a tu proveedor de sistemas.'));
                }       
            }else{
                $vista = 'AperturaCierreCaja.php';
                include $root . '/View/Template.php';
            }
        }else{
            $vista = 'AperturaCierreCaja.php';
            include $root . '/View/Template.php';
        }        
        break;
    
    case 'cerrar': 
        $_form->deleteElement('idCaja');
        $_form->addElement(array('type'=>'text','name'=>'cajaName','label'=>'Caja'),1);
        $_form->setReadOnlydElements(array('efectivoInicial','cajaName'));       
        
        #$login = new Login();
        #if($login->getRole() === '1'){
            $_form->deleteElement('autorizacion_usuario');
            $_form->deleteElement('autorizacion_password');
        #}
        
        if($_GET){$cajaData = $_caja->getById($id);}
        if($_POST){$cajaData = $_POST;}       
        
        $repo = new VentaRepository();        
        $cierre = $repo->getCierreCaja($id);
        
        if($cierre){
           #if(key_exists('3', $cierre)){$cajaData['efectivoFinal'] = $cierre['3'];} 
           if(key_exists('4', $cierre)){$cajaData['chequesFinal'] = $cierre['4'];} 
           if(key_exists('8', $cierre)){$cajaData['electronicoFinal'] = $cierre['8'];}  /*8 es EBT y lo ponemos en electronicoFinal, electronicoFinal no se Usa*/
           //if(key_exists('7', $cierre)){$cajaData['electronicoFinal'] = $cierre['7'];} 
           if(key_exists('10', $cierre)){$cajaData['doorDashFinal'] = $cierre['10'];} 
           
           $tarjetasCredito = 0;
           $tarjetasDebito = 0;
           $ebt = 0;
           if(key_exists('5', $cierre)){$tarjetasCredito = $cierre['5'];}          
           if(key_exists('6', $cierre)){$tarjetasDebito = $cierre['6'];}             
           $cajaData['tarjetasFinal'] = $tarjetasCredito + $tarjetasDebito;
        }       
        
        #Obtener devoluciones en el turno
        $repoDevoluciones = new DevolucionRepository();
        $devoluciones = $repoDevoluciones->getDevolucionesByIdCierre($id);
        //echo "<pre>";var_dump($devoluciones);echo "</pre>";exit;
        if($devoluciones!=null){
            $cajaData['devoluciones'] = $devoluciones['sumTotalDevoluciones'];
            if(key_exists(5, $devoluciones['devolucionesByFormaPago'])){
                $cajaData['tarjetasFinal'] -= $devoluciones['devolucionesByFormaPago']['5'];
            }
            
            if(key_exists(6, $devoluciones['devolucionesByFormaPago'])){
                $cajaData['tarjetasFinal'] -= $devoluciones['devolucionesByFormaPago']['6'];
            }
        }
        //echo "<pre>";var_dump($cajaData);echo "</pre>";exit;
        $_form->setActionController('cerrar');
        $_form->setId($id);        
        $_form->populate($cajaData);
        
        if(isset($_POST['id'])){
            if($_form->isValid()){
                $cajaData['status'] = '2';
                $_caja->setOptions($cajaData);
                $result = $_caja->cerrar($id,$_caja->getOptions()); //no tengo id porque viene de post
                if($result){
                    $flashmessenger->addMessage(array('success'=>'Caja cerrada exitosamente.'));
                    $_idCierreCaja = $id;
                    if($login->isRegister()){
                        $_listaCajas = $_caja->getListaCajas();
                        $_printTicketCierre = true;
                        $vista = 'AperturaCierreCaja.php';
                        include $root.'/View/Template.php';
                        /*En AperturaCierreCaja.php se imprime ticket de cierre*/
                    }else{
                        header('Location: Register.php');
                    }              
                }else{
                    $flashmessenger->addMessage(array('danger'=>'Error. Intenta nuevamente o contacta a tu proveedor de sistemas.'));
                    $vista = 'AperturaCierreCaja.php';
                    include $root . '/View/Template.php';
                }       
            }else{
                $vista = 'AperturaCierreCaja.php';
                include $root . '/View/Template.php';
            }
        }else{
            $vista = 'AperturaCierreCaja.php';
            include $root . '/View/Template.php';
        }        
        break;
        
    default:
        $_form->setActionController('abrir');
        $_form->deleteElement('efectivoFinal');
        $_form->deleteElement('tarjetasFinal');
        $_form->deleteElement('chequesFinal');
        $_form->deleteElement('electronicoFinal');
        $_form->deleteElement('doorDashFinal');
        $_form->deleteElement('waste_lbs');
        $_form->deleteElement('waste_pza');
        
        #$login = new Login();
        #if($login->getRole() === '1'){
            $_form->deleteElement('autorizacion_usuario');
            $_form->deleteElement('autorizacion_password');
        #}
        
        $vista = 'AperturaCierreCaja.php';
        include $root.'/View/Template.php';
}