/** * 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); } } } }
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; }
/** * 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); }
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'; } }