Patch level : ha1102

Files correlati     : ha0.exe ha0300a.msk
Ricompilazione Demo : [ ]
Commento            :
Corretta generazione NAC per cliente di fatturazione
Corretto caricamento file upload.dGG_MM_AAAA_hh_mm_ss


git-svn-id: svn://10.65.10.50/branches/R_10_00@22449 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2011-10-11 16:54:32 +00:00
parent b788b164bd
commit 6fc556a1e2
4 changed files with 61 additions and 24 deletions

View File

@ -49,7 +49,9 @@ bool TDocumenti_premio_msk::on_key(KEY key)
char TDocumenti_premio_msk::find_prezzo_articolo(const TString& codart, real& prezzo, TString& um) const char TDocumenti_premio_msk::find_prezzo_articolo(const TString& codart, real& prezzo, TString& um) const
{ {
//1) contratto (listino cliente) //1) contratto (listino cliente)
const long codcf = get_long(F_CODCF); long codcf = get_long(F_CODCFATT);
if (codcf <= 0)
codcf = get_long(F_CODCF);
const TString& codcontr = get(F_CODCONTR); const TString& codcontr = get(F_CODCONTR);
TToken_string key_umart; TToken_string key_umart;
@ -156,7 +158,7 @@ bool TDocumenti_premio_msk::on_field_event(TOperable_field& o, TField_event e, l
} }
break; break;
case S_CODART: case S_CODART:
if (e == fe_init || e == fe_modify) if ((e == fe_init || e == fe_close) && !o.empty())
{ {
//caricamento del prezzo in fase modifica codart: sequenza contratto->listino->umart //caricamento del prezzo in fase modifica codart: sequenza contratto->listino->umart
//non è possibile mettere un prezzo a mano alla cazzo! //non è possibile mettere un prezzo a mano alla cazzo!

View File

@ -22,11 +22,11 @@ RADIOBUTTON F_TIPOCONTR 1 70
BEGIN BEGIN
PROMPT 16 0 "" PROMPT 16 0 ""
ITEM "A|Anticipo" ITEM "A|Anticipo"
MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS|REQUIRED,F_CODCONTR MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS
ITEM "P|Posticipo" ITEM "P|Posticipo"
MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@|ENABLE,F_CODLIS|NORMAL,F_CODCONTR MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@|ENABLE,F_CODLIS
ITEM "R|Rifatturazione" ITEM "R|Rifatturazione"
MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS|REQUIRED,F_CODCONTR MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS
FLAGS "GZ" FLAGS "GZ"
KEY 1 KEY 1
END END
@ -112,7 +112,7 @@ BEGIN
COPY DISPLAY F_CODCF COPY DISPLAY F_CODCF
OUTPUT F_CODCFATT CODCF OUTPUT F_CODCFATT CODCF
OUTPUT F_DESCFATT RAGSOC OUTPUT F_DESCFATT RAGSOC
CHECKTYPE NORMAL CHECKTYPE REQUIRED
ADD RUN cg0 -1 C ADD RUN cg0 -1 C
END END
@ -126,7 +126,7 @@ BEGIN
INPUT RAGSOC F_DESCFATT INPUT RAGSOC F_DESCFATT
COPY DISPLAY F_DESCF COPY DISPLAY F_DESCF
COPY OUTPUT F_CODCFATT COPY OUTPUT F_CODCFATT
CHECKTYPE NORMAL CHECKTYPE SEARCH
ADD RUN cg0 -1 C ADD RUN cg0 -1 C
END END
@ -202,7 +202,7 @@ BEGIN
USE CONDV USE CONDV
INPUT TIPO "C" INPUT TIPO "C"
INPUT TIPOCF F_TIPOCF SELECT INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_CODCF SELECT INPUT CODCF F_CODCFATT SELECT
INPUT COD F_CODCONTR INPUT COD F_CODCONTR
DISPLAY "Codice" COD DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
@ -415,6 +415,7 @@ BEGIN
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT S_CODART CODART OUTPUT S_CODART CODART
OUTPUT S_DESCR DESCR OUTPUT S_DESCR DESCR
CHECKTYPE REQUIRED
WARNING "Articolo assente" WARNING "Articolo assente"
FLAGS "U" FLAGS "U"
FIELD CODART FIELD CODART
@ -430,6 +431,7 @@ BEGIN
DISPLAY "Codice@20" CODART DISPLAY "Codice@20" CODART
COPY OUTPUT S_CODART COPY OUTPUT S_CODART
FIELD DESCR FIELD DESCR
CHECKTYPE SEARCH
END END
STRING S_UMQTA 2 STRING S_UMQTA 2

View File

@ -120,7 +120,7 @@ protected:
bool genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& documenti_cliente, TLog_report& log); bool genera_nac(const TMask& mask, TArray& contratti_cliente, TArray& documenti_cliente, TLog_report& log);
//metodi basso livello //metodi basso livello
int find_contratti_cliente(const long codcf, const TMask& mask, TArray& contratti_cliente); int find_contratti_cliente(const long codcfatt, const TMask& mask, TArray& contratti_cliente);
void check_date(const TDate& datafine, TDate& dataini); void check_date(const TDate& datafine, TDate& dataini);
int find_numerazioni(const TString& tipo_to_elab, TString_array& num_doc); int find_numerazioni(const TString& tipo_to_elab, TString_array& num_doc);
@ -223,10 +223,12 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
//in base al tipo documento che si deve elaborare (settato in configurazione), ci possono essere più numerazioni da considerare! //in base al tipo documento che si deve elaborare (settato in configurazione), ci possono essere più numerazioni da considerare!
TConfig config(CONFIG_DITTA, "ha"); TConfig config(CONFIG_DITTA, "ha");
const TString& tipo_to_elab = config.get("TipoFatt"); const TString4 tipo_doc_to_elab = config.get("TipoFatt");
/*
//e adesso cerca le numerazioni che contengono il tipo preso dalla configurazione //e adesso cerca le numerazioni che contengono il tipo preso dalla configurazione
TString_array num_doc; TString_array num_doc;
const int numerazioni_valide = find_numerazioni(tipo_to_elab, num_doc); const int numerazioni_valide = find_numerazioni(tipo_doc_to_elab, num_doc);
if (numerazioni_valide > 0) if (numerazioni_valide > 0)
{ {
query << "&&("; query << "&&(";
@ -241,6 +243,10 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
query << ")"; query << ")";
} }
*/
// Inutile testare tutte le numerazioni, basta il tipo documento
query << "&&(" << DOC_TIPODOC << "=='" << tipo_doc_to_elab << "')";
//se c'è l'agente specificato... //se c'è l'agente specificato...
const TString& agente = mask.get(F_CODAGE); const TString& agente = mask.get(F_CODAGE);
const bool has_007 = agente.full(); const bool has_007 = agente.full();
@ -301,15 +307,15 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
} }
//metodo che riempie un array con tutti i contratti del cliente passatogli (in base alla tipologia di contratti da elaborare) //metodo che riempie un array con tutti i contratti del cliente passatogli (in base alla tipologia di contratti da elaborare)
int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask, TArray& contratti_cliente) int THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& mask, TArray& contratti_cliente)
{ {
contratti_cliente.destroy(); contratti_cliente.destroy();
//deve cercare tutti i contratti del cliente e metterli nell'array //deve cercare tutti i contratti del cliente e metterli nell'array
TString query; TString query;
query << "USE DOC KEY 4"; query << "USE DOC KEY 4";
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))"; query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))&&(STR(DOC2=#CODCF))";
query << "\nFROM TIPOCF=C CODCF=#CODCF"; query << "\nFROM TIPOCF=C";
query << "\nTO TIPOCF=C CODCF=#CODCF"; query << "\nTO TIPOCF=C";
TISAM_recordset recset(query); TISAM_recordset recset(query);
@ -325,7 +331,7 @@ int THardy_elab_docs::find_contratti_cliente(const long codcf, const TMask& mask
recset.set_var("#R_TIPODOC", tip_rifa); recset.set_var("#R_TIPODOC", tip_rifa);
recset.set_var("#P_TIPODOC", tip_post); recset.set_var("#P_TIPODOC", tip_post);
recset.set_var("#CODCF", codcf); recset.set_var("#CODCF", codcfatt);
const long n_contratti = recset.items(); //questo serve solo al sagace programmatore const long n_contratti = recset.items(); //questo serve solo al sagace programmatore
@ -487,14 +493,13 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
FOR_EACH_ARRAY_ITEM(contratti_cliente, r, riga) FOR_EACH_ARRAY_ITEM(contratti_cliente, r, riga)
{ {
TContratto_premi& contratto = *(TContratto_premi*)riga; TContratto_premi& contratto = *(TContratto_premi*)riga;
const long ndoc = contratto.numero(); //il numdoc del contratto serve nelle segnalazioni const long ndoc = contratto.numero(); // il numdoc del contratto serve nelle segnalazioni
const long codcf = contratto.codcf_fatt(); //il codice cliente ci serve nella generazione della NAC.. const long codcf = contratto.codcf(); // il codice cliente ci serve nella generazione della NAC...
const char tipo_contratto = contratto.tipo_contratto(); //..e pure il tipo di contratto in esame! const char tipo_contratto = contratto.tipo_contratto(); // ...e pure il tipo di contratto in esame!
//segnaliamo l'elaborazione del contratto sul log //segnaliamo l'elaborazione del contratto sul log
TString log_msg; TString log_msg;
log_msg.format("Contratto:%6ld Cliente:%6ld", ndoc, codcf); log_msg.format("Contratto:%6ld Cliente:%6ld", ndoc, codcf);
//log_msg << "Contratto: " << ndoc << " Cliente: " << codcf;
// generazione del documento NAC dal contratto // generazione del documento NAC dal contratto
// ------------------------------------------- // -------------------------------------------
@ -785,7 +790,7 @@ void THardy_elab_docs::elabora(const TMask& mask)
const long items = genera_recordset(mask, recset); const long items = genera_recordset(mask, recset);
if (items == 0) if (items == 0)
{ {
log.log(1, "Non esistono documenti di vendita che soddisfino i parametri selezionati! Ritenta sarai più fortunato!"); log.log(1, "Non esistono documenti di vendita che soddisfino i parametri selezionati!");
} }
//3) elaborazione documenti e contratti, generazione NAC, salvataggi //3) elaborazione documenti e contratti, generazione NAC, salvataggi

View File

@ -1312,7 +1312,32 @@ void TUpload2Campo::elabora_RC(THardy_upload_recordset& recset, TLog_report& log
} }
} }
static int upload_cmp(const TSortable& o1, const TSortable& o2, void* jolly)
{
const TFilename f1 = (const TString&)o1;
const TFixed_string s1 = f1.ext()+1;
if (s1.empty())
return +1;
const TFilename f2 = (const TString&)o2;
const TFixed_string s2 = f2.ext()+1;
if (s2.empty())
return -1;
TToken_string d1(s1, '_');
TToken_string d2(s2, '_');
int cmp = 0;
const int seq[6] = { 2, 1, 0, 3, 4, 5 }; // upload.dGG_MM_AAAA_hh_mm_ss
for (int i = 0; i < 6 && cmp == 0; i++)
{
const int tok = seq[i];
cmp = d1.get_int(tok) - d2.get_int(tok);
}
return cmp;
}
void TUpload2Campo::elabora(const TMask& mask, TLog_report& log) void TUpload2Campo::elabora(const TMask& mask, TLog_report& log)
{ {
@ -1333,10 +1358,10 @@ void TUpload2Campo::elabora(const TMask& mask, TLog_report& log)
//creazione del filename dei files da importare //creazione del filename dei files da importare
TFilename src_files = _input_path; TFilename src_files = _input_path;
//una volta si importavano tutti i files di tipo upload*.d; poi si è passati ad importare solo upload.d e basta! //una volta si importavano tutti i files di tipo upload*.d; poi si è passati ad importare solo upload.d e basta!
//src_files.add("upload*.d"); src_files.add("upload.d*");
src_files.add("upload.d");
TString_array src_files_list; TString_array src_files_list;
const int n_files_d = list_files(src_files, src_files_list); const int n_files_d = list_files(src_files, src_files_list);
src_files_list.TArray::sort(upload_cmp, NULL);
TProgind pi(n_files_d, TR("Acquisizione files in corso..."), true, true); TProgind pi(n_files_d, TR("Acquisizione files in corso..."), true, true);
@ -1345,8 +1370,11 @@ void TUpload2Campo::elabora(const TMask& mask, TLog_report& log)
{ {
if (!pi.addstatus(1)) if (!pi.addstatus(1))
break; break;
//file corrente in fase di elaborazione
const TFilename curr_fname = src_files_list.row(i); const TFilename curr_fname = src_files_list.row(i);
pi.set_text(curr_fname);
//file corrente in fase di elaborazione
THardy_upload_recordset recset(curr_fname); THardy_upload_recordset recset(curr_fname);
const long items = recset.items(); const long items = recset.items();