Table of Contents

Pravidla pisania zdrojovych kodov ticketIssueLogic kniznici

Vseobecne pravidla pisania zdrojovych kodov : pravidla

Zakladne kroky pre spravnu pracu s TicketIssueLogic

Vseobecne platne pravidla

Kniznica je rozdelena na styri celky:

Aplikacne interface-y

Vsetky triedy podedene od ETicketIssueLogic. Urcuju poradie volania logiky na modulmy. Aplikacne interfac-y si loaduju uzivatelom navolene moduly.

Logicke moduly

Logicke moduly niesu viditelne aplikaciou. Modul predstavuje cast logiky, ktora je potrebna pre vydaj listka.
Funckie v moduloch su rozdelene na dve casti:
Public virtual funckie - funkcie pristupne z interface-ov, umoznuju pracovat s modulom
Protected virtual funckie - pomocne funckie, pri ktorych je predpoklad mozneho rozsirenia v potomkoch

Kazdy modul musi obsahovat:

  1. Obsahuje funckiu Init. Init funkcia sluzi na vytiahnutie inych modulov z ModuleManager-a
  2. Do konstuktoru predka Modulu ETicketIssueModule je potrebne nastavit typ rodiny, do ktorej modul patri.


Verzia kniznice 4.1.0 podporuje nasledovne rodiny modulov:

Jadro

Jadro predstavuje zakladne a pomocne triedy pre pracu s kniznicou

Vystupne data

Vystupne data sluzia na ziskanie dat po vydaji listku. Zivotny cyklus vydaja listka je rozdeleny na tri milniky:

  1. PreIssueData - data vytvorene pred vydajom listka
    • tarifa
    • cena
    • priznak jazdy na CL
    • index casoveho listka
    • vystupna zastavka
    • pouzity customer profile index na karte
  1. PostIssueData - data vytvorene po vydaji listka pred zapisom statistiky a tlacou
    • priznak vystup FlagWasCheckOut
    • priznak prestup FlagWasInterchange
    • priznak ci bol vykonany doplatok FlagWasAdditionalTariffAreaSurcharge
    • pocet vydanych listkov TicketCount
    • hodnota sumy pre vratenie pri checkout-e RefundPrice
    • skutocne vydana cena listka TicketPrice
  1. StatisticData - data vytvarane pri zapise statistiky
    • vystupne data, ktore predstavuju serializovany statisticky listok
  1. ValidTicketData - informacie o platnom vydanom listku
    • priznak ci je listok zapisany na karte
    • priznak o jazde na CL

Inicializacia ticketIssueLogic

V aplikacii je potrebne vytvorit podla potreby instanciu triedy ETicketIssueLogic alebo jej potomkov ( new EGeneralTicketIssueLogic() , new ETicketIssueLogic() , … )
Po vytvoreni instancie je potrebne ticketIssueLogic inicializovat funkciou Init, napriklad:

if ( d->mIssueLogic->Init() != EIssueLogicDefines::Ok )
{
       EERROR(" FATAL Error init ticket issue logic ");
}

Je dobre skontrolovat navratovu hodnotu a minimalne zalogovat navratovu hodnotu do logov. Najlepsie by bolo nastavit ticketIssueLogic na NULL a nedovolit pracu s nespravne inicializovanym ticketissuelogic

Nastavenie uzivatelskych vstupnych dat

Pred vydajom listka je potrebne ticketIssueLogic nastavit vstupne data potrebne pre spravny vydaj listka.
Potrebna funkcionalita pre nastavenie vstupnych dat sa nachadza v triede ETicketIssueLogic a data sa nastavuju ulozisku dat ETicketIssueLogicDataStorage, z ktoreho je nasledne mozny pristup z celej kniznice.

Priklad nastaveni vo verzii 4.1.0

bool SetOperationType( EIssueLogicDefines::OperationType operationType );
bool SetPaymentType( EIssueLogicDefines::PaymentType paymentType );
bool SetIssueType( EIssueLogicDefines::IssueType issueType );
bool SetTariff( const Strojcek::VstupneUdaje::TarifnySystem::ETarifa *tariff );
bool SetTariffGroup( const Strojcek::VstupneUdaje::TarifnySystem::ETarifnaSkupina *tariffGroup );
bool SetTripOrderCheckinBusStop( long tripCheckinBusStopOrder );
bool SetTripOrderCheckoutBusStop( long tripCheckoutBusStopOrder );
bool SetTripOrderOfBusStopForCheckOut( long tripOrderOfBusStopForCheckOut );
bool SetCreditRecharge( unsigned long creditRecharge );
bool SetTicketCount( short ticketCount );
bool SetCancelationStatisticTicketNumber( const long cancelationStatisticTicketNumber );
bool SetDeviceSerialNumber( unsigned long serialNumber );
bool SetAdvertisementEnabled( bool enableAdvertisement );
void SetCrossTransfer(const EM::Strojcek::VstupneUdaje::EPrestupSpoj crossTransfer);
bool SetMultipleTickets( const EHead *multipleTicketsCol );
bool SetCheckInZone( long checkInZone );
bool SetCheckOutZone( long checkOutZone );
bool SetZoneList( const std::list<unsigned long> &zoneList );
bool SetCheckOutZoneBusStopID( unsigned long checkOutZoneBusStopID );
bool SetCheckInZoneBusStopID( unsigned long checkInZoneBusStopID );
bool SetPassNumber( unsigned long passNumber );
bool SetPriceListRow( unsigned short priceListRow );
bool SetFlagShowConfirmationMessageOnPortableEP( bool showConfirmationMessage );
bool SetFlagAllowIssueOnPortableEP( bool allowIssueOnPortableCard );
bool SetFlagTransferForAllTicketsOnCard( EIssueLogicDefines::TransferForAllTicketsOnCard transferForAllTicketsOnCard );
bool SetFlagProlongTicketsTimeValidity( EIssueLogicDefines::ProlongTicketsTimeValidity prolongTicketTimeValidity );
bool SetFlagRepeatedCheckIn( bool repeatedCheckIn );
bool SetFlagExplicitlySelectedTariff( bool explicitlySelectedTariff );
bool SetReclamationUID(long long uid);
bool SetCardWriteOperations( unsigned long cardWriteOperations );
bool SetTimeTicketCounter( unsigned char timeTicketCounter );
bool SetOneWayTicketCardPositioning(EIssueLogicDefines::OneWayTicketCardPositioning positioning);
bool SetSelectedCommercialDiscount( const long commercialDiscountIndexOnCard, const long discountCheckInBusStopLineOrder, const long discountCheckOutBusStopLineOrder , const Strojcek::VstupneUdaje::TarifnySystem::ETarifa *discountTariff );
bool GetOutputDataCollection( std::vector<const ETicketIssueLogicOutputData *> *&ticketIssueOutputData );
bool SetAlternativeTripData( unsigned long lineNumber, unsigned long tripNumber, long protectNumber, long lastBusStopTripOrder );
bool SetServiceCounter( unsigned char serviceCounter );

Do TicketIssueLogic je potrebne nastavit zakladne data pre vykonavanie vydaju listka:


Typ prace s kartou specifikuje bitovo orienotvany enum CardWriteOperations v triede EIssueLogicDefines a umoznuje nastavit struktury, ktore sa budu zapisovat na kartu:
Pozor, pri hotovostnej operacii nastavujte CardWriteNothing !!!

Priklad enumu pre pracu s kartou vo verzii ticketIssueLogic 0.0.96

enum CardWriteOperations
{
      CardWriteNothing                                = 0x0,
      CardWriteAuditor                                = 0x1,
      CardWriteOneWayTickets                          = 0x2,
      CardWriteWallet                                 = 0x4,
      CardWriteTimeTickets                            = 0x8,
      CardWriteCommercialDiscounts                    = 0x10
};


Typ platby urcuje sposob platby za vydany listok a specifikuje ho enum PaymentType v triede EIssueLogicDefines:
Priklad enumu typu platby vo verzii ticketIssueLogic 0.0.95

enum PaymentType
{
      PaymentUndefined                                = -1,
      PaymentCash                                     = 0 ,
      PaymentChipCard                                 = 1,
      PaymentBankCard                                 = 2,
      PaymentInvoice                                  = 3,
      PaymentMarker                                   = 5,
      PaymentCoiner                                   = 11,
      PaymentCoupon                                   = 12,
};


Typ vydajovej operacie urcuje aka logika sa ma vykonavat a specifikuje ho enum OperationType v triede EIssueLogicDefines:
Priklad enumu typu vydajovej operacie vo verzii ticketIssueLogic 0.0.95

enum OperationType
{
      OperationUndefined                              = -1,
      OperationSell                                   = 0,
      OperationCancel                                 = 1,
      OperationCreditRecharge                         = 2,
      OperationCancelCreditRecharge                   = 3,
      OperationCardActivation                         = 4,
      OperationTimeTicketSell                         = 5,
      OperationTimeTicketCancel                       = 6,
      OperationAuditor                                = 7,
      OperationSurchargeSell                          = 8,
      OperationCoinerOverfall                         = 9,
      OperationAdditionalTariffAreaSurcharge          = 10

Ukazka nastavenia vstupnych dat do ticketIssueLogic pred operaciou vydaja listku:

V aplikacii je vytvorena instancia aplikacneho interface-u kniznice ETicketIssueLogic a je potrebne zapisovat jednorazove listky a penazenku na karte pri predaji listka z karty.
V aplikacii je teda potrebne nastavit z enumu CardWriteOperations bity CardWriteOneWayTicket a CardWriteWallet

Priklad:

EGeneralTicketIssueLogic *ticketIssueLogic = new EGeneralTicketIssueLogic();
ticketIssueLogic->SetCardWriteOperations( EIssueLogicDefines::CardWriteOneWayTicket | EIssueLogicDefines::CardWriteWallet ); // logika vie ze ma zapisat len tieto veci na kartu


Pristup k logike mame cez 4 zakladne funkcie :

IssueTicket - najhlavenjsia funkcia, ktora reprezentuje vydaj listka

EIssueLogicDefines::ReturnValues result = d->mIssueLogic->IssueTicket( &writeRequest );
if ( result != EIssueLogicDefines::Ok )
{
       // osetrenie navratovych hodnot
}

WriteStatistic - funkcia IssueTicket pripravi statisticke listky a na potrebnom mieste je uz potrebne len zavolat WriteStatistic, ktora zapise incicializvoane listky do statistiky

EIssueLogicDefines::ReturnValues result = d->mIssueLogic->WriteStatistic( false ); // false - nie je nedokoncena operacia , true - nedokoncena operacia
if ( result != EIssueLogicDefines::Ok )
{
       // osetrenie navratovych hodnot
}

Print/PrintLastTicketCopy - vytlaci data, ktore funckia IssueTicket v priebehu vydaja listku vytvorila

Pomocou funckie PrintLastTicketCopy je mozne viackrat vytlacit listok

EIssueLogicDefines::ReturnValues result = d->mIssueLogic->Print() / d->mIssueLogic->PrintLastTicketCopy();
if ( result != EIssueLogicDefines::Ok )
{
       // osetrenie navratovych hodnot
}

CalculatePrice - Funckia pripravena na vynutenie vypoctu ceny

long calculatedPrice = 0;
double calculatedPriceDecimalFormat = 0;

EIssueLogicDefines::ReturnValues result = d->mIssueLogic->CalculatePrice( calculatedPrice, calculatedPriceDecimalFormat );
if ( result != EIssueLogicDefines::Ok )
{
       // osetrenie navratovych hodnot
}