Vseobecne pravidla pisania zdrojovych kodov : pravidla
Kniznica je rozdelena na styri celky:
Vsetky triedy podedene od ETicketIssueLogic. Urcuju poradie volania logiky na modulmy. Aplikacne interfac-y si loaduju uzivatelom navolene 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:
Verzia kniznice 4.1.0 podporuje nasledovne rodiny modulov:
Jadro predstavuje zakladne a pomocne triedy pre pracu s kniznicou
Vystupne data sluzia na ziskanie dat po vydaji listku. Zivotny cyklus vydaja listka je rozdeleny na tri milniky:
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
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
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
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
}