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
{
//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);
TToken_string key_umart;
@ -156,7 +158,7 @@ bool TDocumenti_premio_msk::on_field_event(TOperable_field& o, TField_event e, l
}
break;
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
//non è possibile mettere un prezzo a mano alla cazzo!

View File

@ -22,11 +22,11 @@ RADIOBUTTON F_TIPOCONTR 1 70
BEGIN
PROMPT 16 0 ""
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"
MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@|ENABLE,F_CODLIS|NORMAL,F_CODCONTR
MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@|ENABLE,F_CODLIS
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"
KEY 1
END
@ -112,7 +112,7 @@ BEGIN
COPY DISPLAY F_CODCF
OUTPUT F_CODCFATT CODCF
OUTPUT F_DESCFATT RAGSOC
CHECKTYPE NORMAL
CHECKTYPE REQUIRED
ADD RUN cg0 -1 C
END
@ -126,7 +126,7 @@ BEGIN
INPUT RAGSOC F_DESCFATT
COPY DISPLAY F_DESCF
COPY OUTPUT F_CODCFATT
CHECKTYPE NORMAL
CHECKTYPE SEARCH
ADD RUN cg0 -1 C
END
@ -202,7 +202,7 @@ BEGIN
USE CONDV
INPUT TIPO "C"
INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_CODCF SELECT
INPUT CODCF F_CODCFATT SELECT
INPUT COD F_CODCONTR
DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR
@ -415,6 +415,7 @@ BEGIN
DISPLAY "Descrizione@50" DESCR
OUTPUT S_CODART CODART
OUTPUT S_DESCR DESCR
CHECKTYPE REQUIRED
WARNING "Articolo assente"
FLAGS "U"
FIELD CODART
@ -430,6 +431,7 @@ BEGIN
DISPLAY "Codice@20" CODART
COPY OUTPUT S_CODART
FIELD DESCR
CHECKTYPE SEARCH
END
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);
//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);
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!
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
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)
{
query << "&&(";
@ -241,6 +243,10 @@ long THardy_elab_docs::genera_recordset(const TMask& mask, TISAM_recordset& recs
query << ")";
}
*/
// Inutile testare tutte le numerazioni, basta il tipo documento
query << "&&(" << DOC_TIPODOC << "=='" << tipo_doc_to_elab << "')";
//se c'è l'agente specificato...
const TString& agente = mask.get(F_CODAGE);
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)
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();
//deve cercare tutti i contratti del cliente e metterli nell'array
TString query;
query << "USE DOC KEY 4";
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))";
query << "\nFROM TIPOCF=C CODCF=#CODCF";
query << "\nTO TIPOCF=C CODCF=#CODCF";
query << "\nSELECT ((TIPODOC=#A_TIPODOC)||(TIPODOC=#R_TIPODOC)||(TIPODOC=#P_TIPODOC))&&(STR(DOC2=#CODCF))";
query << "\nFROM TIPOCF=C";
query << "\nTO TIPOCF=C";
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("#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
@ -487,14 +493,13 @@ bool THardy_elab_docs::genera_nac(const TMask& mask, TArray& contratti_cliente,
FOR_EACH_ARRAY_ITEM(contratti_cliente, r, riga)
{
TContratto_premi& contratto = *(TContratto_premi*)riga;
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 char tipo_contratto = contratto.tipo_contratto(); //..e pure il tipo di contratto in esame!
const long ndoc = contratto.numero(); // il numdoc del contratto serve nelle segnalazioni
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!
//segnaliamo l'elaborazione del contratto sul log
TString log_msg;
log_msg.format("Contratto:%6ld Cliente:%6ld", ndoc, codcf);
//log_msg << "Contratto: " << ndoc << " Cliente: " << codcf;
// 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);
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

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)
{
@ -1333,10 +1358,10 @@ void TUpload2Campo::elabora(const TMask& mask, TLog_report& log)
//creazione del filename dei files da importare
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!
//src_files.add("upload*.d");
src_files.add("upload.d");
src_files.add("upload.d*");
TString_array 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);
@ -1345,8 +1370,11 @@ void TUpload2Campo::elabora(const TMask& mask, TLog_report& log)
{
if (!pi.addstatus(1))
break;
//file corrente in fase di elaborazione
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);
const long items = recset.items();