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:
parent
b788b164bd
commit
6fc556a1e2
@ -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!
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user