⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 postavitarifudlg.cpp

📁 load data from pc to hand held terminal and vice versa
💻 CPP
字号:
// PostaviTarifuDlg.cpp : implementation file
//

#include "stdafx.h"
#include "UnosLozinkeDlg.h"
#include "RucniTerminal.h"
#include "PostaviTarifuDlg.h"
#include "Komunikator.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPostaviTarifuDlg dialog

CPostaviTarifuDlg::CPostaviTarifuDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPostaviTarifuDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPostaviTarifuDlg)
	m_PrelazakNaLetnje = 0;
	m_PrelazakNaZimsko = 0;
	m_VisaTarifa_RD1 = FALSE;
	m_VisaTarifa_RD2 = FALSE;
	m_VisaTarifa_RD3 = FALSE;
	m_VisaTarifa_RD4 = FALSE;
	m_VisaTarifa_V1 = FALSE;
	m_VisaTarifa_V2 = FALSE;
	m_VisaTarifa_V3 = FALSE;
	m_VisaTarifa_V4 = FALSE;
	m_Vreme_RD1 = 0;
	m_Vreme_RD2 = 0;
	m_Vreme_RD3 = 0;
	m_Vreme_RD4 = 0;
	m_Vreme_V1 = 0;
	m_Vreme_V2 = 0;
	m_Vreme_V3 = 0;
	m_Vreme_V4 = 0;
	m_PrelazNaLetnjeSat = 0;
	m_PrelazNaZimskoSat = 0;
	m_PrelazAktivan = FALSE;
	m_SubotaJeRadniDan = FALSE;
	//}}AFX_DATA_INIT
}


void CPostaviTarifuDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPostaviTarifuDlg)
	DDX_DateTimeCtrl(pDX, IDC_PRELAZAK_NA_LETNJE, m_PrelazakNaLetnje);
	DDX_DateTimeCtrl(pDX, IDC_PRELAZAK_NA_ZIMSKO, m_PrelazakNaZimsko);
	DDX_Check(pDX, IDC_VISA_TARIFA_RD1, m_VisaTarifa_RD1);
	DDX_Check(pDX, IDC_VISA_TARIFA_RD2, m_VisaTarifa_RD2);
	DDX_Check(pDX, IDC_VISA_TARIFA_RD3, m_VisaTarifa_RD3);
	DDX_Check(pDX, IDC_VISA_TARIFA_RD4, m_VisaTarifa_RD4);
	DDX_Check(pDX, IDC_VISA_TARIFA_V1, m_VisaTarifa_V1);
	DDX_Check(pDX, IDC_VISA_TARIFA_V2, m_VisaTarifa_V2);
	DDX_Check(pDX, IDC_VISA_TARIFA_V3, m_VisaTarifa_V3);
	DDX_Check(pDX, IDC_VISA_TARIFA_V4, m_VisaTarifa_V4);
	DDX_DateTimeCtrl(pDX, IDC_VREME_RD1, m_Vreme_RD1);
	DDX_DateTimeCtrl(pDX, IDC_VREME_RD2, m_Vreme_RD2);
	DDX_DateTimeCtrl(pDX, IDC_VREME_RD3, m_Vreme_RD3);
	DDX_DateTimeCtrl(pDX, IDC_VREME_RD4, m_Vreme_RD4);
	DDX_DateTimeCtrl(pDX, IDC_VREME_V1, m_Vreme_V1);
	DDX_DateTimeCtrl(pDX, IDC_VREME_V2, m_Vreme_V2);
	DDX_DateTimeCtrl(pDX, IDC_VREME_V3, m_Vreme_V3);
	DDX_DateTimeCtrl(pDX, IDC_VREME_V4, m_Vreme_V4);
	DDX_DateTimeCtrl(pDX, IDC_PRELAZ_NA_LETNJE_SAT, m_PrelazNaLetnjeSat);
	DDX_DateTimeCtrl(pDX, IDC_PRELAZ_NA_ZIMSKO_SAT, m_PrelazNaZimskoSat);
	DDX_Check(pDX, IDC_PRELAZ_AKTIVAN, m_PrelazAktivan);
	DDX_Check(pDX, IDC_SUBOTA_JE_RADNI_DAN, m_SubotaJeRadniDan);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPostaviTarifuDlg, CDialog)
	//{{AFX_MSG_MAP(CPostaviTarifuDlg)
	ON_BN_CLICKED(IDC_OCITAJ_MASTER_TARIFU, OnOcitajMasterTarifu)
	ON_BN_CLICKED(ID_ZAKLJUCAJ_TARIFU, OnZakljucajTarifu)
	ON_BN_CLICKED(ID_IZMENI_LOZINKU, OnIzmeniLozinku)
	ON_BN_CLICKED(ID_OTKLJUCAJ_TARIFU, OnOtkljucajTarifu)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPostaviTarifuDlg message handlers

// Pomocna funkcija 
void CPostaviTarifuDlg::DodajPromenuUSpisak( TSpisakVremenaPromeneTarife& spisak, 
                                             CTime vreme, BOOL visaTarifa ){
    KTime                   vremeDatum( KTime( vreme.GetTime() ) );
    KVremePromeneTarife*    pPromenaTarife  = new KVremePromeneTarife;

    pPromenaTarife->trenutakPromene        = vremeDatum;
    pPromenaTarife->bPrelazakNaVisuTarifu  = (visaTarifa)?true:false;
    spisak.push_back( *pPromenaTarife );
}

void CPostaviTarifuDlg::OnOK() 
{
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();

    pRTApp->PrikaziPorukuIKursorZaCekanje( IDS_SNIMANJE_PODATAKA, this );

    // Najpre proveri da li je terminal spreman za narednu komandu
    int PorukaID;
    KAdminInfo admInf;
    if( pRTApp->TerminalSpreman( PorukaID, admInf ) ) {

        // Preuzmi podatke iz forme u odgovarajuce promenljive ( i odradi validaciju )
        if ( CPostaviTarifuDlg::UpdateData() ) {
        
            TSpisakVremenaPromeneTarife pomSpisak;
            KPromenaTarife*             pPromena;
            TSpisakPromenaTarife        tarifa;
    
            // Napuni podatke o promenama tarife u radnim danima
            pomSpisak.clear();
            DodajPromenuUSpisak( pomSpisak, m_Vreme_RD1, m_VisaTarifa_RD1 );
            DodajPromenuUSpisak( pomSpisak, m_Vreme_RD2, m_VisaTarifa_RD2 );
            DodajPromenuUSpisak( pomSpisak, m_Vreme_RD3, m_VisaTarifa_RD3 );
            DodajPromenuUSpisak( pomSpisak, m_Vreme_RD4, m_VisaTarifa_RD4 );
            pPromena = new KPromenaTarife( PT_RADNI_DAN, pomSpisak );
            tarifa.push_back( *pPromena );
            // Napuni podatke o promenama tarife za vreme vikenda
            pomSpisak.clear();
            DodajPromenuUSpisak( pomSpisak, m_Vreme_V1, m_VisaTarifa_V1 );
            DodajPromenuUSpisak( pomSpisak, m_Vreme_V2, m_VisaTarifa_V2 );
            DodajPromenuUSpisak( pomSpisak, m_Vreme_V3, m_VisaTarifa_V3 );
            DodajPromenuUSpisak( pomSpisak, m_Vreme_V4, m_VisaTarifa_V4 );
            pPromena = new KPromenaTarife( PT_VIKEND, pomSpisak );
            tarifa.push_back( *pPromena );
        
            // Formiraj poruku sa podacima o tarifi
            string cSadrzajPoruke;

            KTime letnje( m_PrelazakNaLetnje.GetTime() );
            KTime letnjeSat( m_PrelazNaLetnjeSat.GetTime() );
    
            KTime zimsko( m_PrelazakNaZimsko.GetTime() );
            KTime zimskoSat( m_PrelazNaZimskoSat.GetTime() );
    
            bool bPrelazakAktivan = (m_PrelazAktivan)?true:false;
            bool bSubotaJeRadniDan = (m_SubotaJeRadniDan)?true:false;
    
            cSadrzajPoruke = KInterpret::Instance()->TarifuUString( tarifa, 
                                                                    letnje, letnjeSat,
                                                                    zimsko, zimskoSat, 
                                                                    bPrelazakAktivan,
                                                                    bSubotaJeRadniDan );

            // Snimi tarifu na terminal
            if ( KKomunikator::Instance()->SnimiNaTerminal( KT_POSTAVI_MASTER_TARIFU, cSadrzajPoruke ) )
                PorukaID = IDS_SNIMANJE_USPELO;
            else
                PorukaID = IDS_SNIMANJE_NEUSPELO;
        }
    }

    pRTApp->UkloniPorukuIKursorZaCekanje();

    pRTApp->MyMessageBox( PorukaID );
}

// Pomocna procedura
void CPostaviTarifuDlg::NapuniPromeneTarife( TSpisakVremenaPromeneTarife* spisakVremenaPromene,
                                             unsigned int                 nBrojPromena, 
                                             CTime*                       vreme[], 
                                             BOOL*                        bVisaTarifa[] ){
    TSpisakVremenaPromeneTarife::iterator vp_iter    = spisakVremenaPromene->begin();
    TSpisakVremenaPromeneTarife::iterator vp_iterEnd = spisakVremenaPromene->end();
    unsigned int i  = 0;
    while ( vp_iter != vp_iterEnd && i < nBrojPromena ) {
        *(vreme[i])       = CTime( vp_iter->trenutakPromene.GetTimeT() );
        *(bVisaTarifa[i]) = static_cast<BOOL>( vp_iter->bPrelazakNaVisuTarifu );
        vp_iter++;
        i++;
    }
}

// Procedura ocitava tarifu sa rucnog terminala i postavlja odgovarajuce promenljive forme.
// Ukoliko citanje sa serijskog porta ne uspe, vraca false.
bool CPostaviTarifuDlg::ProcitajMasterTarifuSaTerminala( bool& bDobraVeza,
                                                         bool& bZakljucan, bool& bIspravanID,
                                                         bool bBrzaKomunikacija ) {
    bool izlaz = false;

    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();

    // Najpre proveri vezu sa terminalom ( da li je terminal uopste prikljucen, 
    // da li je zakljucan i da li je ID odgovarajuci )
    KAdminInfo admInf;
    if ( bDobraVeza = pRTApp->InicijalizujVezuSaTerminalom( bZakljucan, bIspravanID, admInf ) ){
        if ( !bZakljucan && bIspravanID ) {
            if ( bBrzaKomunikacija ) pRTApp->UspostaviBrzuKomunikaciju();
            // Procitaj tarifu sa rucnog terminala
            string cKorisniPodaci;
            if ( KKomunikator::Instance()->OcitajMasterTarifu( cKorisniPodaci ) ) {

                // Pretvori grupu bajtova primljenih sa serijskog porta u odgovarajucu strukturu podataka
                TSpisakPromenaTarife    tarifa;
                KTime                   prelazakNaLetnjeDatum, prelazakNaLetnjeVreme;
                KTime                   prelazakNaZimskoDatum, prelazakNaZimskoVreme;
                bool                    bPrelazakAktivan;
                bool                    bSubotaJeRadniDan;
                KInterpret::Instance()->StringMasterUTarifu( cKorisniPodaci,
                                                             tarifa, 
                                                             prelazakNaLetnjeDatum, prelazakNaLetnjeVreme,
                                                             prelazakNaZimskoDatum, prelazakNaZimskoVreme,
                                                             bPrelazakAktivan, bSubotaJeRadniDan );
                // Grupisi promenljive forme u nizove, radi lakseg manipulisanja
                const unsigned int BR_PROMENA = 4;
                CTime*  vremeRD[ BR_PROMENA ]      = { &m_Vreme_RD1,      &m_Vreme_RD2,      &m_Vreme_RD3,      &m_Vreme_RD4 };
                CTime*  vremeV [ BR_PROMENA ]      = { &m_Vreme_V1,       &m_Vreme_V2,       &m_Vreme_V3,       &m_Vreme_V4 };
                BOOL*   bVisaTarifaRD[ BR_PROMENA ]= { &m_VisaTarifa_RD1, &m_VisaTarifa_RD2, &m_VisaTarifa_RD3, &m_VisaTarifa_RD4 };
                BOOL*   bVisaTarifaV [ BR_PROMENA ]= { &m_VisaTarifa_V1,  &m_VisaTarifa_V2,  &m_VisaTarifa_V3,  &m_VisaTarifa_V4 };
            
                // Obidji strukture podataka i napuni odgovarajuce promenljive forme
                TSpisakPromenaTarife::iterator t_iter    = tarifa.begin();
                TSpisakPromenaTarife::iterator t_iterEnd = tarifa.end();
                while ( t_iter != t_iterEnd ) {
                    if      ( t_iter->nDan == PT_RADNI_DAN ){
                        NapuniPromeneTarife( &( t_iter->spisakVremenaPromene ), BR_PROMENA, 
                                             vremeRD, bVisaTarifaRD );
                    }
                    else if ( t_iter->nDan == PT_VIKEND ){
                        NapuniPromeneTarife( &( t_iter->spisakVremenaPromene ), BR_PROMENA, 
                                             vremeV, bVisaTarifaV );
                    }
                    t_iter++;
                }
            	m_PrelazakNaLetnje = CTime( prelazakNaLetnjeDatum.GetTimeT() );
            	m_PrelazakNaZimsko = CTime( prelazakNaZimskoDatum.GetTimeT() );
            	m_PrelazNaLetnjeSat= CTime( prelazakNaLetnjeVreme.GetTimeT() );
        	    m_PrelazNaZimskoSat= CTime( prelazakNaZimskoVreme.GetTimeT() );
                m_PrelazAktivan    = static_cast<BOOL>( bPrelazakAktivan );
                m_SubotaJeRadniDan = static_cast<BOOL>( bSubotaJeRadniDan );
        
                // Postavi signal da je sve OK
                izlaz = true;
            }
            if ( bBrzaKomunikacija ) pRTApp->VratiNormalnuKomunikaciju();
        }
    }

    return izlaz;
}

BOOL CPostaviTarifuDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

    // Postavi format datmskih polja :
    //  - promene tarife radnim danima
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_VREME_RD1, "HH':'mm':'ss", this );
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_VREME_RD2, "HH':'mm':'ss", this );
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_VREME_RD3, "HH':'mm':'ss", this );
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_VREME_RD4, "HH':'mm':'ss", this );
    //  - promene tarife vikendom
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_VREME_V1, "HH':'mm':'ss", this );
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_VREME_V2, "HH':'mm':'ss", this );
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_VREME_V3, "HH':'mm':'ss", this );
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_VREME_V4, "HH':'mm':'ss", this );
    //  - prelazak na letnje vreme
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_PRELAZAK_NA_LETNJE, "dd'.'MM'.'yyyy'.'", this );
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_PRELAZ_NA_LETNJE_SAT, "HH':'mm':'ss", this );
    //  - prelazak na zimsko vreme
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_PRELAZAK_NA_ZIMSKO, "dd'.'MM'.'yyyy'.'", this );
    CRucniTerminalApp::FormatirajDateTimePicker( IDC_PRELAZ_NA_ZIMSKO_SAT, "HH':'mm':'ss", this );

    // Ako je terminal prikljucen, ocitaj tarifu sa terminala i postavi promenljive forme
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();
    if ( pRTApp->IsTerminalPrikljucen() ) {
        bool bDobraVeza;
        bool bZakljucan;
        bool bIspravanID;
        if ( ProcitajMasterTarifuSaTerminala( bDobraVeza, bZakljucan, bIspravanID, true ) ) {
            // Osvezi polja forme ( usaglasi sa vrednostima odgovarajucih promenljivih )
            CPostaviTarifuDlg::UpdateData( FALSE );
        }
    }
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPostaviTarifuDlg::OnOcitajMasterTarifu() 
{
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();

    pRTApp->PrikaziPorukuIKursorZaCekanje( IDS_PREUZIMANJE_PODATAKA, this );
 
    int PorukaID;
    bool bDobraVeza;
    bool bZakljucan;
    bool bIspravanID;
    if ( ProcitajMasterTarifuSaTerminala( bDobraVeza, bZakljucan, bIspravanID ) ) {
        PorukaID = IDS_PREUZIMANJE_USPELO;
        // Osvezi polja forme ( usaglasi sa vrednostima odgovarajucih promenljivih )
        CPostaviTarifuDlg::UpdateData( FALSE );
    }
    else if ( !bDobraVeza ) {
        PorukaID = IDS_LOSA_VEZA;
    }
    else if ( !bIspravanID ) {
        PorukaID = IDS_LOS_PCAPP_ID;
    }
    else if ( bZakljucan ){
        PorukaID = IDS_TERMINAL_ZAKLJUCAN;
    }
    else {
        PorukaID = IDS_PREUZIMANJE_NEUSPELO;
    }

    pRTApp->UkloniPorukuIKursorZaCekanje();

    pRTApp->MyMessageBox( PorukaID );
}

void CPostaviTarifuDlg::OnOtkljucajTarifu()
{
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();
    pRTApp->OtkljucajTarifu( this );
}

void CPostaviTarifuDlg::OnZakljucajTarifu() 
{
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();
    pRTApp->ZakljucajTarifu( this );
}

void CPostaviTarifuDlg::OnIzmeniLozinku() 
{
    CRucniTerminalApp* pRTApp = ( CRucniTerminalApp* ) AfxGetApp();
    pRTApp->IzmeniLozinkuZaTarifu( this );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -