Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
riporto hardy da 11


git-svn-id: svn://10.65.10.50/branches/R_10_00@20919 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2010-09-28 15:45:47 +00:00
parent dbc3934086
commit 2b49469581
6 changed files with 206 additions and 20 deletions

View File

@ -22,7 +22,7 @@
class TDocumenti_premio_msk : public TAutomask
{
protected:
bool find_prezzo_articolo(const TString& codart, real& prezzo, TString& um) const;
char find_prezzo_articolo(const TString& codart, real& prezzo, TString& um) const;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual bool on_key(KEY key);
@ -46,9 +46,9 @@ bool TDocumenti_premio_msk::on_key(KEY key)
return TAutomask::on_key(key);
}
bool 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
//1) contratto (listino cliente)
const long codcf = get_long(F_CODCF);
const TString& codcontr = get(F_CODCONTR);
@ -59,7 +59,9 @@ bool TDocumenti_premio_msk::find_prezzo_articolo(const TString& codart, real& pr
um = rec_umart.get(UMART_UM);
const real umart_prezzo = rec_umart.get_real(UMART_PREZZO);
char origine_prezzo = 'A'; //'A'nagrafica
prezzo = umart_prezzo; //mal che vada sarà il prezzo di umart
TToken_string key;
//CONTRATTI: tipo=C|catven=|tipocf=C|codcf=codcf|cod=codcontr|tiporiga=A|codriga=codart|um=um
@ -82,7 +84,10 @@ bool TDocumenti_premio_msk::find_prezzo_articolo(const TString& codart, real& pr
//2) non c'è un prezzo sul contratto, prova con il listino standard
if (!contratto_prezzo.is_zero())
{
prezzo = contratto_prezzo;
origine_prezzo = 'C';
}
else
{
key.cut(0);
@ -110,10 +115,13 @@ bool TDocumenti_premio_msk::find_prezzo_articolo(const TString& codart, real& pr
const TRectype& rec_listino = cache().get(LF_RCONDV, key);
const real listino_prezzo = rec_listino.get(RCONDV_PREZZO);
if (!listino_prezzo.is_zero())
{
prezzo = listino_prezzo;
origine_prezzo = 'L';
}
}
return !prezzo.is_zero();
return origine_prezzo;
}
bool TDocumenti_premio_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
@ -155,11 +163,23 @@ bool TDocumenti_premio_msk::on_field_event(TOperable_field& o, TField_event e, l
real prezzo;
TString4 um;
//se il prezzo l'ha trovato lo mette nel relativo campo
if (find_prezzo_articolo(o.get(), prezzo, um))
char origine = find_prezzo_articolo(o.get(), prezzo, um);
if (!prezzo.is_zero())
{
TMask& row_mask = o.mask();
row_mask.set(S_PREZZO, prezzo);
row_mask.set(S_UMQTA, um);
//per i contratti di anticipo/rifatturazione DEVE esistere il prezoo dell'articolo sul listino cliente (contratto campo)..
//..perchè non potrà andare a modificare altro che tale prezzo nel programma di aggiornamento contratti premio hardy..
//..scaduti: (ha0400)
const char tipo_contr = get(F_TIPOCONTR)[0];
if (origine != 'C' && (tipo_contr == 'A' || tipo_contr == 'R'))
{
TString msg;
msg.format("Non esiste il prezzo per l'articolo %s nel listino cliente selezionato!", (const char*)o.get());
return error_box(msg);
}
}
else
{

View File

@ -27,8 +27,11 @@
#define F_DATAFCOMP 226
#define F_NUMREG 227
#define F_COLLEGA 228
#define F_ANTICIPATO 229
#define F_RESO_STORICO 230
#define F_DOCRIF 229
#define F_DATA_DOCRIF 230
#define F_ANTICIPATO 231
#define F_RESO_STORICO 232
#define F_RIGHE 500 //questo va messo 500 sennò ve0 si incazza e non funziona più

View File

@ -8,7 +8,7 @@ ENDPAGE
PAGE "Gestione contratti premio" -1 -1 78 23
GROUPBOX DLG_NULL 78 13
GROUPBOX DLG_NULL 78 14
BEGIN
PROMPT 1 0 ""
END
@ -16,9 +16,12 @@ END
RADIOBUTTON F_TIPOCONTR 1 76
BEGIN
PROMPT 2 0 "@bTipo contratto"
ITEM "A|Anticipo" MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@
ITEM "P|Posticipo" MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@
ITEM "R|Rifatturazione" MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@
ITEM "A|Anticipo"
MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS|REQUIRED,F_CODCONTR
ITEM "P|Posticipo"
MESSAGE ENABLE,F_DATAFCOMP|CLEAR,1@|ENABLE,F_CODLIS|NORMAL,F_CODCONTR
ITEM "R|Rifatturazione"
MESSAGE CLEAR,F_DATAFCOMP|ENABLE,1@|CLEAR,F_CODLIS|REQUIRED,F_CODCONTR
FLAGS "GZ"
KEY 1
END
@ -293,27 +296,44 @@ BEGIN
FLAGS "D"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 10 "@bRiferimenti contratto"
END
STRING F_DOCRIF 12
BEGIN
PROMPT 31 10 "Codice "
FIELD DOC1
END
DATA F_DATA_DOCRIF
BEGIN
PROMPT 55 10 "Data "
FIELD DATADOCRIF
END
GROUPBOX DLG_NULL 76 3
BEGIN
PROMPT 2 10 "@bSomme anticipate/restituite"
PROMPT 2 11 "@bSomme anticipate/restituite"
END
CURRENCY F_ANTICIPATO
BEGIN
PROMPT 3 11 "Anticipato "
PROMPT 3 12 "Anticipato "
FLAGS "U"
GROUP 1
END
CURRENCY F_RESO_STORICO
BEGIN
PROMPT 38 11 "Restituito "
PROMPT 38 12 "Restituito "
GROUP 1
END
SPREADSHEET F_RIGHE
BEGIN
PROMPT 2 13 ""
PROMPT 2 14 ""
ITEM "Codice Articolo@20"
ITEM "Descrizione@40"
ITEM "UM@2"

View File

@ -5,11 +5,14 @@
#include <recarray.h>
#include <recset.h>
#include <relapp.h>
#include <reputils.h>
#include <clifo.h>
#include <doc.h>
#include <rdoc.h>
#include "../ve/rcondv.h"
#include "halib.h"
#include "ha0.h"
#include "ha0400a.h"
@ -19,6 +22,7 @@
///////////////////////////////////////////////////////////
class THardy_tied_mask : public TAutomask
{
int _pos_check, _pos_codcf, _pos_ragsoc, _pos_anno, _pos_codnum, _pos_ndoc, _pos_tipodoc, _pos_importo, _pos_condpag, _pos_codage;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -28,6 +32,8 @@ protected:
long fill_recordset(const long codcf, TISAM_recordset& recset);
void fill_sheet();
int elabora_contratto(TToken_string* riga_sheet, TLog_report& log);
public:
THardy_tied_mask();
~THardy_tied_mask();
@ -117,6 +123,8 @@ void THardy_tied_mask::fill_sheet()
row.add(ragsoc);
const int anno = recset.get(RDOC_ANNO).as_int();
row.add(anno);
const TString& codnum = recset.get(RDOC_CODNUM).as_string();
row.add(codnum);
const long ndoc = recset.get(RDOC_NDOC).as_int();
row.add(ndoc);
const TString& tipo = recset.get("DOC.TIPODOC").as_string();
@ -161,6 +169,105 @@ void THardy_tied_mask::check_all(const bool checked)
sf_righe.force_update();
}
//metodo base per l'elaborazione dei contratti pareggiati
int THardy_tied_mask::elabora_contratto(TToken_string* riga_sheet, TLog_report& log)
{
//si crea il contratto_premi di origine, per caricare i dati che poi dovrà modificare
const long codcf = riga_sheet->get_long(_pos_codcf);
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();
//cerca il listino cliente corrispondente..
const TString4 listino_cliente = contratto_premi.get(DOC_CODCONT);
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))
{
TRectype& riga = righe_contr_premi[i];
//solo le righe merce del contratto premi devono essere scasinate!
if (riga.get(RDOC_TIPORIGA) == HARDY_TIPORIGA_MERCE)
{
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_TIPORIGA, 'A');
rcondv.put(RCONDV_CODRIGA, codart);
rcondv.put(RCONDV_UM, um);
err = rcondv.read(_isequal, _lock);
if (err == NOERR)
{
//premio e ns_carico li prende dalla riga del contratto premi
const real premio = riga.get_real(RC_1_PREMIO);
const real ns_carico = riga.get_real(RC_1_NSCARICO);
//il prezzo lo prende dal listino cliente
real prezzo = rcondv.get_real(RCONDV_PREZZO);
//aggiorna il prezzo con una formula ladresca...
prezzo = prezzo - premio + ns_carico;
rcondv.put(RCONDV_PREZZO, prezzo);
err = rcondv.rewrite();
if (err != NOERR)
{
TString msg;
msg.format("Imossibile aggiornare il listino %s del cliente %6ld ! Errore %d", (const char*)listino_cliente, codcf, err);
log.log(1, msg);
}
}
else
{
TString msg;
msg.format("Impossibile trovare l'articolo %s con u.m. %s nel listino %s del cliente %6ld !! Errore %d",
(const char*)codart, (const char*)um, (const char*)listino_cliente, codcf, err);
log.log(2, msg);
}
} //if (riga.get(RDOC_TIPORIGA)...
} //for (int i = righe_contr_premi.last_row()...
//alla fine della fiera il contratto premi va messo in stato scaduto, ovvero 9 direi...
if (err == NOERR)
{
const TTipo_documento& tipodoc = contratto_premi.tipo();
const TString& stato_scaduto = tipodoc.stato_chiuso();
contratto_premi.put(DOC_STATO, stato_scaduto);
err = contratto_premi.rewrite();
if (err != NOERR)
{
TString msg;
msg.format("Impossibile aggiornare il contratto premi %4d%s%7ld del cliente %6ld !! Errore %d",
anno, (const char*)codnum, ndoc, err);
log.log(2, msg);
}
}
//aggiornamento positivo del log!
if (err == NOERR)
{
TString msg;
msg.format("Chiuso contratto premi %7ld del cliente %6ld - Aggiornato listino %s", ndoc, codcf, (const char*)listino_cliente);
}
return err;
}
bool THardy_tied_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
@ -182,6 +289,23 @@ bool THardy_tied_mask::on_field_event(TOperable_field& o, TField_event e, long j
}
break;
case DLG_OK:
if (e == fe_button)
{
//già che ci siamo mettiamoci pure un log di elaborazione
TLog_report log("Elaborazione contratti selezionati");
log.kill_duplicates();
log.log(0, "");
TSheet_field& righe = sfield(F_RIGHE);
FOR_EACH_SHEET_ROW(righe, r, riga)
{
//vengono elaborate solo le righe checkate
const char checked = riga->get_char(0);
if (checked == 'X')
int err = elabora_contratto(riga, log);
}
}
break;
default:
break;
break;
@ -191,6 +315,18 @@ bool THardy_tied_mask::on_field_event(TOperable_field& o, TField_event e, long j
THardy_tied_mask::THardy_tied_mask() : TAutomask ("ha0400a")
{
//assegna una volta per tutte le pos delle colonne di sheet
TSheet_field& sf_righe = sfield(F_RIGHE);
_pos_check = sf_righe.cid2index(S_CHECK);
_pos_codcf = sf_righe.cid2index(S_CODCF);
_pos_ragsoc = sf_righe.cid2index(S_RAGSOC);
_pos_anno = sf_righe.cid2index(S_ANNO);
_pos_codnum = sf_righe.cid2index(S_CODNUM);
_pos_ndoc = sf_righe.cid2index(S_NDOC);
_pos_tipodoc = sf_righe.cid2index(S_TIPO);
_pos_importo = sf_righe.cid2index(S_IMPORTO);
_pos_condpag = sf_righe.cid2index(S_CONDPAG);
_pos_codage = sf_righe.cid2index(S_CODAG);
}
THardy_tied_mask::~THardy_tied_mask()

View File

@ -13,8 +13,9 @@
#define S_CODCF 102
#define S_RAGSOC 103
#define S_ANNO 104
#define S_NDOC 105
#define S_TIPO 106
#define S_IMPORTO 107
#define S_CONDPAG 108
#define S_CODAG 109
#define S_CODNUM 105
#define S_NDOC 106
#define S_TIPO 107
#define S_IMPORTO 108
#define S_CONDPAG 109
#define S_CODAG 110

View File

@ -74,6 +74,7 @@ BEGIN
ITEM "Cliente"
ITEM "Ragione sociale@40"
ITEM "Anno"
ITEM "Num."
ITEM "N.Contr."
ITEM "Tipo"
ITEM "Importo@12"
@ -128,6 +129,11 @@ BEGIN
PROMPT 1 3 "Anno "
END
STRING S_CODNUM 4
BEGIN
PROMPT 1 4 "Num. "
END
NUMBER S_NDOC 7
BEGIN
PROMPT 1 4 "N. doc. "