Example #1
0
 /**
  * Funció que imprimeix les entrades d'una sessió en una sola comanda. 
  **/
 function printAllEntrades()
 {
     $R = $this->getAjaxData();
     //Carrego la sessió que vull imprimir totes les entrades
     $STO = new SessioTableObject(null, SessioTableObject::FROM_EMPTY);
     $STO->loadById($R['idSessio']);
     //per totes les localitats de la sessió, les marco com ocupades i venudes en metàl·lic.
     //Carrego el teatre
     $TTO = new TeatreTableObject(null, TeatreTableObject::FROM_EMPTY);
     $TTO->loadById($STO->sessio['s_idTeatre']);
     $planol = $TTO->getPlanol();
     foreach ($planol['zones'] as $idZ => $Z) {
         foreach ($Z['files'] as $idF => $F) {
             //Creo una nova comanda i començo a vendre les entrades
             $CTO = new ComandaTableObject(null, ComandaTableObject::FROM_EMPTY);
             $CTO->newComandaId(ComandaTableObject::TIPUS_PAGAMENT_METALIC, ComandaTableObject::TIPUS_LLOCCOMPRA_TAQUILLA, ComandaTableObject::TIPUS_COMANDA_VENTA);
             //Repassem els seients ( si la línia és en blanc, exist serà false )
             $exist = false;
             foreach ($F['seients'] as $idS => $S) {
                 //Per cada seient, faig una venda.
                 $id = $Z['codi'] . '-' . intval($F['num_fila']) . '-' . intval($S['numero']) . '-' . $STO->getSessioId();
                 if ($S['numero'] > 0 && $S['tipus'] == 'planol-cercle') {
                     $LTO = new LocalitatTableObject(null, LocalitatTableObject::FROM_EMPTY);
                     $LTO->loadLocalitatByIdString($id);
                     $LTO->updateLocalitat($CTO, LocalitatTableObject::ESTAT_OCUPADA);
                     $LTO->doSave();
                     $exist = true;
                 }
             }
             //Si la línia no és en blanc i hi ha seients la guardem
             if ($exist) {
                 $CTO->comanda['co_estat'] = ComandaTableObject::TIPUS_ESTAT_PAGAT;
                 $CTO->doMarcarPagatsOK();
                 $CTO->doSave();
                 $CTO->loadComanda();
                 Pdf::generateEntrades($CTO, false);
             }
         }
     }
 }
Example #2
0
 public static function validaPagamentTPV($Ds_SignatureVersion, $Ds_MerchantParameters, $Ds_Signature, $getTPV = false)
 {
     //Creem objecte
     $RedSysTmp = new RS();
     //Aquest el creem per carregar les dades inicials
     $RedSys = new RS();
     //Aquest tindrà les dades tant si entrem per tpv com si no hi entrem
     $Config = Json::loadJsonConfigFile('config.json');
     $CTO = new ComandaTableObject();
     //Descodifiquem i passem a array els paràmetres
     $decode = $RedSysTmp->decodeMerchantParameters($Ds_MerchantParameters);
     $RedSysTmp->stringToArray($decode);
     //Si entrem sense haver passat pel TPV ( o sigui, metàl·lic o reserva o 0 euros )
     $Par = array('Error' => "");
     if (isset($RedSysTmp->vars_pay['Ds_Merchant_MerchantData'])) {
         foreach ($RedSysTmp->vars_pay as $K => $V) {
             $tmp = str_replace("_Merchant_", "_", $K);
             $RedSys->setParameter($tmp, $V);
         }
         $RedSys->setParameter('Ds_Response', '0000');
         $RedSys->setParameter('Ds_Order', '0');
         $RedSys->setParameter('Ds_AuthorisationCode', '0');
     } else {
         //No cal fer cap canvi, simplement ho passo tot junt
         $RedSys = $RedSysTmp;
     }
     //Carreguem la id de l'entrada i comencem el procés
     $tmp = explode('-', $RedSys->getParameter('Ds_MerchantData'));
     if (!isset($tmp[1])) {
         $Par['Error'] = "ENTRADA";
     } else {
         $Par['idComanda'] = intval($tmp[1]);
         $idComanda = $Par['idComanda'];
         $CTO->loadComanda($tmp[1]);
         if ($CTO->getComandaId() > 0) {
             //Generem la signatura
             $signatura_rebuda = $Ds_Signature;
             //Només generem la signatura si entrem per TPV sinó la validem automàticament
             $signatura_generada = $signatura_rebuda;
             if (!isset($RedSysTmp->vars_pay['Ds_Merchant_MerchantData'])) {
                 $signatura_generada = $RedSys->createMerchantSignatureNotif($Config['TPV_ENT_PASSWORD'], $Ds_MerchantParameters);
             }
             //Si la signatura és correcta i no ha donat error, marquem la matrícula com a pagada
             if ($signatura_rebuda != $signatura_generada) {
                 $Par['Error'] = "SIGNATURA";
             } elseif ($RedSys->getParameter('Ds_Response') != '0000') {
                 $Par['Error'] = "RESPONSE";
             } else {
                 //Si estem a la crida automàtica del GetTPV fem les tasques que toquen
                 if ($getTPV) {
                     $CTO->comanda['co_estat'] = ComandaTableObject::TIPUS_ESTAT_PAGAT;
                     $CTO->comanda['co_TpvCode'] = $RedSys->getParameter('Ds_AuthorisationCode');
                     $CTO->comanda['co_TpvOrder'] = $RedSys->getParameter('Ds_Order');
                     $CTO->doSave();
                     //Guardem les dades de la targeta
                     $CTO->doMarcarPagatsOK();
                     //Tots els seients en estat P, passen a O
                     //Actualitzem les places lliures
                     foreach (array_keys($CTO->getLlistatLocalitats()) as $idSessio) {
                         //Carreguem les sessions de la comanda i actualitzem
                         $STO = new SessioTableObject(null, SessioTableObject::FROM_EMPTY);
                         $STO->loadById($idSessio);
                         //Carrego els seients lliures i els guardo
                         $STO->updateLocalitatsLliures();
                     }
                     //Només enviem el correu amb entrades si és una venda i existeix el correu.
                     self::sendEmailComanda($CTO);
                 }
             }
         } else {
             $Par['Error'] = 'COMANDA';
         }
     }
     $Par['Ds_Response'] = $RedSys->getParameter('Ds_Response');
     $Par['Ds_MerchantData'] = $RedSys->getParameter('Ds_MerchantData');
     $Par['CTO'] = $CTO;
     return $Par;
 }
Example #3
0
 /**
  * OK
  **/
 public function ajaxPlanol()
 {
     $request = $this->getAjaxData();
     $Origen = $request['Origen'];
     //Si cliquem botó nova venda, genera un nou codi de comanda
     if (isset($request['NovaVenta'])) {
         if ($request['NovaVenta']) {
             $this->NovaVenta();
         }
     }
     $STO = new SessioTableObject(null, SessioTableObject::FROM_EMPTY);
     $STO->loadById($request['idSessio']);
     $ETO = new EspectacleTableObject(null, EspectacleTableObject::FROM_EMPTY);
     $ETO->loadById($STO->sessio['s_idEspectacle']);
     //Carrego les localitats
     $OL = $STO->getLocalitats();
     //Carrego el teatre
     $TTO = new TeatreTableObject(null, TeatreTableObject::FROM_EMPTY);
     $TTO->loadById($STO->sessio['s_idTeatre']);
     $planol = $TTO->getPlanol();
     $ZonesPlanol = $TTO->getZones();
     //Ordeno els preus per zones i activitat general
     $LlistatPreusActivitat = array();
     $LlistatPreusPerZona = array();
     foreach ($STO->getPreus() as $K => $P) {
         if ($Origen == 'web' && $P->isVisibleInternet() || $Origen == 'admin') {
             //Guardem el preu segons codi de preu
             $LlistatPreusActivitat[$P->preu['idPreu']] = $P;
             //Si tenim un preu per totes les zones, el marquem per totes les zones
             if ($P->preu['zona'] == '*') {
                 foreach ($ZonesPlanol as $Z) {
                     $LlistatPreusPerZona[$Z][] = $P;
                 }
             }
             $LlistatPreusPerZona[$P->preu['zona']][] = $P;
         }
     }
     //Retornaré els preus per zones i les localitats que hi ha a la sala
     $RET = array('preusZones' => array(), 'seients' => array(), 'SessioData' => array());
     //Carrego l'array amb els preus de les zones... per poder escollir al desplegable
     foreach ($LlistatPreusPerZona as $K => $V) {
         $RET['preusZones'][] = array('zona' => $K, 'preus' => $V);
     }
     //Genero el plànol
     foreach ($planol['zones'] as $idZ => $Z) {
         foreach ($Z['files'] as $idF => $F) {
             foreach ($F['seients'] as $idS => $S) {
                 $idLocalitat = $Z['codi'] . '-' . intval($F['num_fila']) . '-' . intval($S['numero']) . '-' . $STO->getSessioId();
                 //Si és un seient i existeix la localitat carrego el tipus de localitat
                 if (strcmp($S['tipus'], 'planol-cercle') == 0 && isset($OL[$idLocalitat])) {
                     $planol['zones'][$idZ]['files'][$idF]['seients'][$idS]['tipus'] = $OL[$idLocalitat]->getTipusLocalitat(Session::get('idComanda'), $Origen);
                 }
                 //Si per la zona que busquem no hi ha preus, deshabilitem la zona
                 if (isset($LlistatPreusPerZona[$Z['codi']][0])) {
                     $planol['zones'][$idZ]['files'][$idF]['seients'][$idS]['preuEscollit'] = $LlistatPreusPerZona[$Z['codi']][0];
                 } else {
                     $planol['zones'][$idZ]['files'][$idF]['seients'][$idS]['tipus'] = 'planol-cercle-deshabilitat';
                 }
                 $planol['zones'][$idZ]['files'][$idF]['seients'][$idS]['idSeient'] = $idLocalitat;
                 $planol['zones'][$idZ]['files'][$idF]['seients'][$idS]['numero'] = intval($S['numero']);
             }
         }
     }
     $RET['seients'] = $planol;
     $RET['SessioData'] = array('Espectacle' => $ETO, 'Sessio' => $STO);
     echo json_encode($RET);
 }
Example #4
0
 public function novaLocalitat($idComanda)
 {
     //Carrego els preus inicials per a una localitat
     $STO = new SessioTableObject(null, SessioTableObject::FROM_EMPTY);
     $STO->loadById($this->localitat['l_idSessio']);
     $Preus = $STO->getPreus($this->localitat['l_zona']);
     //Dels preus que hi ha, agafo el primer que està disponible a internet. Si no n'hi ha cap, agafo el primer de tots i llestos
     if (isset($Preus[0])) {
         $PreuDisponible = $Preus[0];
         //if( $Preus[0]->preu['internet'] == 'No'):
         //    foreach($Preus as $V){
         //        if($V->preu['internet'] == 'Sí') $PreuDisponible = $V;
         //    }
         //endif;
         $this->localitat['l_estat'] = 'L';
         $this->localitat['l_data'] = date('U', time());
         $this->localitat['l_idComanda'] = $idComanda;
         $this->localitat['l_idPreu'] = $PreuDisponible;
         $this->localitat['l_codi'] = $this->generaCodiQR();
         $this->localitat['l_horaArribada'] = NULL;
     } else {
         $this->localitat['l_estat'] = 'D';
     }
 }