Corretta gestione generazione nac nolo separatamente dalle altre

git-svn-id: svn://10.65.10.50/branches/R_10_00@22839 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2013-04-09 15:07:10 +00:00
parent 43042b134a
commit 19f7ec802f
5 changed files with 74 additions and 122 deletions

View File

@ -67,6 +67,7 @@ bool TDocumenti_premio_query_msk::on_field_event(TOperable_field& o, TField_even
return true;
}
class TDocumenti_premio_msk : public TAutomask
{
protected:
@ -77,7 +78,7 @@ protected:
public:
const TString& find_contabilizzazione() const;
TDocumenti_premio_msk(const char* name = "ha0300a") : TAutomask(name) {}
TDocumenti_premio_msk(const char* name) : TAutomask(name) {}
};
//metodo standard per far funzionare il shift+f12 in modo da poter cambiare lo stato
@ -279,7 +280,9 @@ TMask* TDocumenti_premio::get_mask(int m)
if (m < MODE_INS)
return _qmsk;
const TString& tipo = _qmsk->get(F_TIPOCONTR);
return tipo == "N" ? _nmsk : _cmsk;
TMask* msk = tipo == "N" ? _nmsk : _cmsk;
msk->set(F_TIPOCONTR, tipo);
return msk;
}
//cerca il primo numero valido per NDOC

View File

@ -59,14 +59,37 @@ END
NUMBER F_CODCF 6
BEGIN
PROMPT 2 2 "Cliente "
WARNING "Cliente assente"
HELP "Codice del cliente del documento"
FIELD CODCF
FLAGS "D"
USE LF_CLIFO SELECT SOSPESO!="X"
INPUT TIPOCF "C"
INPUT CODCF F_CODCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Partita IVA@12" PAIV
DISPLAY "Sospeso" SOSPESO
OUTPUT F_CODCF CODCF
OUTPUT F_DESCF RAGSOC
CHECKTYPE REQUIRED
ADD RUN cg0 -1 C
END
STRING F_DESCF 50
BEGIN
WARNING "Cliente assente"
HELP "Ragione sociale del cliente del documento"
PROMPT 24 2 ""
FLAGS "D"
USE LF_CLIFO KEY 2 SELECT SOSPESO!="X"
INPUT TIPOCF "C"
INPUT RAGSOC F_DESCF
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Partita IVA@12" PAIV
DISPLAY "Sospeso" SOSPESO
COPY OUTPUT F_CODCF
CHECKTYPE REQUIRED
ADD RUN cg0 -1 C
END
NUMBER F_CODCFATT 6
@ -81,8 +104,6 @@ BEGIN
DISPLAY "Sospeso" SOSPESO
OUTPUT F_CODCFATT CODCF
OUTPUT F_DESCFATT RAGSOC
OUTPUT F_CODCF CODCF
OUTPUT F_DESCF RAGSOC
CHECKTYPE REQUIRED
ADD RUN cg0 -1 C
FIELD DOC2

View File

@ -51,33 +51,6 @@ bool THardy_elab_docs_mask::on_field_event(TOperable_field& o, TField_event e, l
}
}
break;
/*case F_TIPOCONTR:
if (e == fe_modify)
{
//in base alla tipologia di contratti da elaborare decide numerazione e tipo delle NAC da generare
TConfig config(CONFIG_DITTA, "ha");
TString4 codnum, tipodoc;
switch (o.get()[0])
{
case 'A':
codnum = config.get("NaAntNum");
tipodoc = config.get("NaAntTip");
break;
case 'R':
codnum = config.get("NaRifaNum");
tipodoc = config.get("NaRifaTip");
break;
default:
codnum = config.get("NaPostNum");
tipodoc = config.get("NaPostTip");
break;
}
set(F_CODNUM_NAC, codnum);
set(F_CODTIPO_NAC, tipodoc);
}
break;*/
//in caso di elaborazione definitiva è obbligatorio..
//..eliminare tutte le NAC provvisorie generate in precedenza
case F_DEFINITIVO:
@ -281,6 +254,7 @@ 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)
// flags: 0x7 = tutti tranne nolo; 0x8 = nolo
int THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& mask, int flags, TArray& contratti_cliente)
{
contratti_cliente.destroy();
@ -290,8 +264,9 @@ int THardy_elab_docs::find_contratti_cliente(const long codcfatt, const TMask& m
if (!data_ini_elab.ok())
check_date(data_fine_elab, data_ini_elab);
//settaggio delle variabili
//il codice numerazione lo trova nella configurazione Hardy, e lo deve scegliere in base alla tipologia di contratti che sta esaminando!
// settaggio delle variabili
// il codice numerazione lo trova nella configurazione Hardy,
// lo deve scegliere in base alla tipologia di contratti che sta esaminando!
for (int f = 0; f < 4; f++) if (flags & (1 << f))
{
TString4 codnum, tipodoc;
@ -802,7 +777,7 @@ bool THardy_elab_docs::genera_fat(const TMask& mask, TContratto_premi& contratto
fat.put(DOC_STATO, 1);
fat.put(DOC_DATADOC, datadoc);
fat.put(DOC_TIPOCF, 'C');
fat.put(DOC_CODCF, contratto.get(DOC_DOC2));
fat.put(DOC_CODCF, contratto.get(DOC_CODCF));
fat.put(DOC_CODAG, contratto.get(DOC_CODAG));
fat.put(DOC_CODPAG, fat_codpag);
fat.put(DOC_DOC1, contratto.get(DOC_NDOC));
@ -822,9 +797,8 @@ bool THardy_elab_docs::genera_fat(const TMask& mask, TContratto_premi& contratto
contratto.put(DOC_NUMANT, contratto.get(DOC_NCOLLI)); // Chiude contratto forzosamente
}
else
{
contratto.add(DOC_NUMANT, UNO); // Incrementa numero di rate pagate
}
if (provv == 'D')
{
const int err = contratto.rewrite();
@ -935,6 +909,8 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
TArray contratti_cliente, documenti_cliente;
TAssoc_array nac_nolo;
const int tc = mask.get_int(F_TIPOCONTR); // 0x7 (tutti tranne nolo) o 0x8 (solo nolo)
//giro sulle fatture (è il giro di più alto livello che viene esteso all'interno delle elabora_contratti)
for (bool ok = fatture.move_first(); ok; ok = fatture.move_next())
{
@ -942,7 +918,7 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
break;
const long codcf = fatture.get(DOC_CODCF).as_int();
//al cambio cliente deve controllare i contratti di quel cliente nel periodo di elaborazione!!
// al cambio cliente deve controllare i contratti di quel cliente nel periodo di elaborazione!!
if (codcf != old_codcf)
{
//generazione NAC del cliente precedente (una per contratto cliente)
@ -956,12 +932,12 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
TString msg; msg << TR("Cliente") << ' ' << codcf << ' ' << cache().get(LF_CLIFO, key, CLI_RAGSOC);
log.log(0, msg);
const int n_contratti = find_contratti_cliente(codcf, mask, 0xF, contratti_cliente);
const int n_contratti = find_contratti_cliente(codcf, mask, tc, contratti_cliente);
if (n_contratti == 0)
{
TString msg;
msg << TR("Il cliente non ha un contratto valido nel periodo selezionato pur avendo fatture.");
log.log_error(msg);
log.log(1, msg);
}
}
@ -997,21 +973,24 @@ void THardy_elab_docs::elabora_documenti(const TMask& mask, TISAM_recordset& fat
}
}
// Elabora tutti i contratti di nolo per generare fatture ed effetti
const int cn = find_contratti_cliente(mask.get_long(F_CODCF), mask, 0x8, contratti_cliente);
FOR_EACH_ARRAY_ROW(contratti_cliente, n_nolo, r_nolo)
if (tc & 0x8) // Elaborazino nolo?
{
TContratto_premi& contratto = *(TContratto_premi*)r_nolo;
// Elabora tutti i contratti di nolo per generare fatture ed effetti
const int cn = find_contratti_cliente(mask.get_long(F_CODCF), mask, 0x8, contratti_cliente);
FOR_EACH_ARRAY_ROW(contratti_cliente, n_nolo, r_nolo)
{
TContratto_premi& contratto = *(TContratto_premi*)r_nolo;
TToken_string cnkey; // Chiave contratto
cnkey.add(contratto.get(DOC_PROVV));
cnkey.add(contratto.get(DOC_ANNO));
cnkey.add(contratto.get(DOC_CODNUM));
cnkey.add(contratto.get(DOC_NDOC));
TToken_string cnkey; // Chiave contratto
cnkey.add(contratto.get(DOC_PROVV));
cnkey.add(contratto.get(DOC_ANNO));
cnkey.add(contratto.get(DOC_CODNUM));
cnkey.add(contratto.get(DOC_NDOC));
const TToken_string* nk = (const TToken_string*)nac_nolo.objptr(cnkey);
TToken_string nakey = nk ? *nk : EMPTY_STRING;
genera_fat(mask, contratto, nakey, log);
const TToken_string* nk = (const TToken_string*)nac_nolo.objptr(cnkey);
TToken_string nakey = nk ? *nk : EMPTY_STRING;
genera_fat(mask, contratto, nakey, log);
}
}
}

View File

@ -5,7 +5,7 @@
#define F_RAGSOC 205
#define F_DADATA 206
#define F_ADATA 207
//#define F_TIPOCONTR 208
#define F_TIPOCONTR 208
//#define F_CODNUM_NAC 210
//#define F_DESCRNUM_NAC 211
//#define F_CODTIPO_NAC 212

View File

@ -1,6 +1,6 @@
#include "ha0500a.h"
PAGE "Generazione NAC" -1 -1 78 11
PAGE "Generazione NAC" -1 -1 78 15
GROUPBOX DLG_NULL 76 5
BEGIN
@ -69,85 +69,34 @@ BEGIN
VALIDATE DATE_CMP_FUNC >= F_DADATA
END
GROUPBOX DLG_NULL 76 3
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 1 6 "@bParametri elaborazione"
END
BOOLEAN F_DEFINITIVO
BEGIN
PROMPT 2 7 "Definitiva"
END
BOOLEAN F_KILLPROVV
BEGIN
PROMPT 2 8 "Eliminare tutte le note di accredito provvisorie"
END
DATE F_DATAELAB
BEGIN
PROMPT 2 7 "Data elaborazione "
PROMPT 43 7 "Data elaborazione "
FLAGS "A"
CHECKTYPE REQUIRED
END
BOOLEAN F_DEFINITIVO
BEGIN
PROMPT 40 7 "Definitivo"
END
/*RADIOBUTTON F_TIPOCONTR 1 72
RADIOBUTTON F_TIPOCONTR 1 76
BEGIN
PROMPT 2 8 "@bTipi contratto da elaborare"
ITEM "A|Anticipo"
ITEM "P|Posticipo"
ITEM "R|Rifatturazione"
FLAGS "Z"
END
STRING F_CODNUM_NAC 4
BEGIN
PROMPT 2 11 "Num. doc. NAC "
USE %NUM
INPUT CODTAB F_CODNUM_NAC
DISPLAY "Codice@8" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUM_NAC CODTAB
OUTPUT F_DESCRNUM_NAC S0
FLAGS "DG"
CHECKTYPE REQUIRED
END
STRING F_DESCRNUM_NAC 50 43
BEGIN
PROMPT 29 11 ""
USE %NUM KEY 2
INPUT S0 F_DESCRNUM_NAC
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_CODNUM_NAC
FLAGS "DG"
CHECKTYPE NORMAL
END
STRING F_CODTIPO_NAC 4
BEGIN
PROMPT 2 12 "Tipo doc. NAC "
USE %TIP
INPUT CODTAB F_CODTIPO_NAC
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODTIPO_NAC CODTAB
OUTPUT F_DESCRTIPO_NAC S0
FLAGS "DG"
CHECKTYPE REQUIRED
END
STRING F_DESCRTIPO_NAC 50 43
BEGIN
PROMPT 29 12 ""
USE %TIP KEY 2
INPUT S0 F_DESCRTIPO_NAC
DISPLAY "Descrizione@60" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODTIPO_NAC
FLAGS "DG"
CHECKTYPE NORMAL
END*/
BOOLEAN F_KILLPROVV
BEGIN
PROMPT 1 9 "Eliminare tutte le note di accredito provvisorie"
PROMPT 1 10 "@bContratti da elaborare"
ITEM "7|Anticipo/Posticipo/Rifatturazione"
ITEM "8|Nolo"
END
STRING DLG_PROFILE 50