📄 postavitarifudlg.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 + -