From a0803b776d52c1f7c00b4129a4785e9d35835c93 Mon Sep 17 00:00:00 2001 From: luca Date: Wed, 29 Sep 2010 11:13:04 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/branches/R_10_00@20923 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ha/ha0300.cpp | 12 +++--- ha/ha0400.cpp | 85 +++++++++++++++++++++++++++++++++++++----- projects/ha0.rc | 4 ++ projects/ha0.vcproj | 37 +++++++++--------- projects/ps1001.vcproj | 8 ++++ 5 files changed, 111 insertions(+), 35 deletions(-) create mode 100755 projects/ha0.rc diff --git a/ha/ha0300.cpp b/ha/ha0300.cpp index 393fdbfbd..2b547fe64 100755 --- a/ha/ha0300.cpp +++ b/ha/ha0300.cpp @@ -156,7 +156,7 @@ bool TDocumenti_premio_msk::on_field_event(TOperable_field& o, TField_event e, l } break; case S_CODART: - if (e == fe_modify) + if (e == fe_init || e == fe_modify) { //caricamento del prezzo in fase modifica codart: sequenza contratto->listino->umart //non è possibile mettere un prezzo a mano alla cazzo! @@ -305,15 +305,18 @@ void TDocumenti_premio::read_rows(TMask& m) if (tipo == HARDY_TIPORIGA_MERCE || tipo.blank()) { TToken_string& row = sheet.row(-1); //aggiunge una riga vuota - for (int i = sm.fields()-1; i >= 0; i--) //giro su tutti i campi della maschera di riga... + for (int j = sm.fields()-1; j >= 0; j--) //giro su tutti i campi della maschera di riga... { - TMask_field& mf = sm.fld(i); //aggiunge solo quelli che hanno un field + TMask_field& mf = sm.fld(j); //aggiunge solo quelli che hanno un field if ((mf.field() != NULL) && (mf.dlg() > 100)) //> 100 per evitare errori sui campi dlg_null { const int idx = sheet.cid2index(mf.dlg()); row.add(mf.field()->read(rec), idx); } } + //aggiorna al volo la riga (serve per aggiornare il prezzo prendendolo dal listino cliente; funziona perchè legato alla on_field di S_CODART.. + //..in modalità fe_init) + sheet.check_row(sheet.items()-1); } else if (tipo == HARDY_TIPORIGA_SOMMA)//se invece è la riga con le somme anticipate/maturate (solo 1 per contratto!) -> va messa in testata { @@ -322,8 +325,7 @@ void TDocumenti_premio::read_rows(TMask& m) m.set(F_ANTICIPATO, anticipato); m.set(F_RESO_STORICO, maturato); } - - } + } //for (int i = 1;... } diff --git a/ha/ha0400.cpp b/ha/ha0400.cpp index 9cb87261c..780229623 100755 --- a/ha/ha0400.cpp +++ b/ha/ha0400.cpp @@ -11,6 +11,8 @@ #include #include +#include "../mg/umart.h" +#include "../ve/condv.h" #include "../ve/rcondv.h" #include "halib.h" @@ -33,6 +35,7 @@ protected: void fill_sheet(); int elabora_contratto(TToken_string* riga_sheet, TLog_report& log); + real find_costo(const TString& codart, const TString& um) const; public: THardy_tied_mask(); @@ -170,6 +173,26 @@ void THardy_tied_mask::check_all(const bool checked) } +real THardy_tied_mask::find_costo(const TString& codart, const TString& um) const +{ + const TRectype& rec_anamag = cache().get(LF_ANAMAG, codart); + real costo = rec_anamag.get_real(ANAMAG_ULTCOS1); + if (costo <= ZERO) + costo = rec_anamag.get_real(ANAMAG_COSTSTD); + + if (costo <= ZERO) + { + TLocalisamfile umart(LF_UMART); + umart.put(UMART_CODART, codart); + umart.put(UMART_UM, um); + const int err_umart = umart.read(); + if (err_umart == NOERR) + costo = umart.get_real(UMART_PREZZO) * 0.5; + } + + return costo; +} + //metodo base per l'elaborazione dei contratti pareggiati int THardy_tied_mask::elabora_contratto(TToken_string* riga_sheet, TLog_report& log) { @@ -178,18 +201,43 @@ int THardy_tied_mask::elabora_contratto(TToken_string* riga_sheet, TLog_report& const int anno = riga_sheet->get_int(_pos_anno); const TString& codnum = riga_sheet->get(_pos_codnum); const long ndoc = riga_sheet->get_long(_pos_ndoc); - const TString4 tipodoc = riga_sheet->get(_pos_tipodoc); //crea il contratto premi... TContratto_premi contratto_premi('D', anno, codnum, ndoc); //..e le sue righe TRecord_array& righe_contr_premi = contratto_premi.body(); + //indicatore di errore complessivo! + int err = NOERR; + //cerca il listino cliente corrispondente.. const TString4 listino_cliente = contratto_premi.get(DOC_CODCONT); + + TToken_string key; + key.add("C"); //0 + key.add(""); //1 + key.add("C"); //2 + key.add(codcf); //3 + key.add(listino_cliente); //4 + TLocalisamfile condv(LF_CONDV); + condv.put(CONDV_TIPO, key.get(0)); + condv.put(CONDV_CATVEN, key.get(1)); + condv.put(CONDV_TIPOCF, key.get(2)); + condv.put(CONDV_CODCF, key.get(3)); + condv.put(RCONDV_COD, key.get(4)); + err = condv.read(); + //se non lo trova (non dovrebbe MAI accadere, ma i listini cliente possono essere erroneamente accoppati via gestione contratti campo + if (err != NOERR) + { + TString msg; + msg.format("Il contratto premi %4d%s%7ld del cliente %6ld non ha un listino cliente associato !! Errore: %d", + anno, (const char*)codnum, ndoc, codcf, err); + log.log(2, msg); + } + + //se lo trova scatta l'analisi delle righe listino cliente TLocalisamfile rcondv(LF_RCONDV); - int err = NOERR; //e adesso scatta la ricerca dell'articolo del contratto premi dentro le righe del listino cliente... for (int i = righe_contr_premi.last_row(); i > 0 && err == NOERR; i = righe_contr_premi.pred_row(i)) { @@ -200,14 +248,18 @@ int THardy_tied_mask::elabora_contratto(TToken_string* riga_sheet, TLog_report& const TString80 codart = riga.get(RDOC_CODART); const TString4 um = riga.get(RDOC_UMQTA); //adesso gli tocca cercare lo stesso articolo (e UM) dentro le righe listino cliente per raccatare il prezzo - rcondv.put(RCONDV_TIPO, 'C'); - rcondv.put(RCONDV_CATVEN, ""); - rcondv.put(RCONDV_TIPOCF, 'C'); - rcondv.put(RCONDV_CODCF, codcf); - rcondv.put(RCONDV_COD, listino_cliente); + rcondv.put(RCONDV_TIPO, key.get(0)); + rcondv.put(RCONDV_CATVEN, key.get(1)); + rcondv.put(RCONDV_TIPOCF, key.get(2)); + rcondv.put(RCONDV_CODCF, key.get(3)); + rcondv.put(RCONDV_COD, key.get(4)); rcondv.put(RCONDV_TIPORIGA, 'A'); rcondv.put(RCONDV_CODRIGA, codart); - rcondv.put(RCONDV_UM, um); + + //la u.m. ci va solo se il listino cliente ha la gestione u.m. (tanto per complicarsi la vita!) + const bool gestum_contr = cache().get(LF_CONDV, key, CONDV_GESTUM) == "X"; + if (gestum_contr) + rcondv.put(RCONDV_UM, um); err = rcondv.read(_isequal, _lock); if (err == NOERR) @@ -219,8 +271,18 @@ int THardy_tied_mask::elabora_contratto(TToken_string* riga_sheet, TLog_report& real prezzo = rcondv.get_real(RCONDV_PREZZO); //aggiorna il prezzo con una formula ladresca... prezzo = prezzo - premio + ns_carico; - rcondv.put(RCONDV_PREZZO, prezzo); + //controlla di non avere un prezzo del cazzo! + const real costo = find_costo(codart, um); + if (prezzo < costo) + { + TString msg; + msg.format("Il prezzo dell'articolo %s e' inferiore alla meta' del costo !", (const char*)codart); + log.log(2, msg); + } + + rcondv.put(RCONDV_PREZZO, prezzo); + err = rcondv.rewrite(); if (err != NOERR) { @@ -244,7 +306,7 @@ int THardy_tied_mask::elabora_contratto(TToken_string* riga_sheet, TLog_report& if (err == NOERR) { const TTipo_documento& tipodoc = contratto_premi.tipo(); - const TString& stato_scaduto = tipodoc.stato_chiuso(); + const char stato_scaduto = tipodoc.stato_chiuso(); contratto_premi.put(DOC_STATO, stato_scaduto); err = contratto_premi.rewrite(); @@ -304,6 +366,7 @@ bool THardy_tied_mask::on_field_event(TOperable_field& o, TField_event e, long j if (checked == 'X') int err = elabora_contratto(riga, log); } + log.print_or_preview(); } break; default: @@ -355,6 +418,8 @@ void THardy_tied::main_loop() bool THardy_tied::create() { + open_files(LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, 0); + return TSkeleton_application::create(); } diff --git a/projects/ha0.rc b/projects/ha0.rc new file mode 100755 index 000000000..a92f59451 --- /dev/null +++ b/projects/ha0.rc @@ -0,0 +1,4 @@ +"9012" ICON DISCARDABLE "../res/exe.ico" + +rcinclude ../../wx289/include/wx/msw/wx.rc + diff --git a/projects/ha0.vcproj b/projects/ha0.vcproj index e2ccc78b3..f39fb9624 100755 --- a/projects/ha0.vcproj +++ b/projects/ha0.vcproj @@ -338,10 +338,18 @@ RelativePath="..\ha\ha0300.cpp" > + + + + + + @@ -376,6 +388,10 @@ RelativePath="..\ha\ha0300a.h" > + + @@ -427,27 +443,8 @@ - - - - - - + + + +