Patch level : 10.0 332

Files correlati     : lv0, lv0400a.msk
Ricompilazione Demo : [ ]
Commento            :
Contratti - Testata
Tipo canone
È un listbox con valori:
  0|Nessuno
  1|Importo fisso
  2|% su valore convenzionale per cliente
Se viene selezionata l’opzione Importo fisso, devo attivare un listbox con valori:
  0|Nessuno
  1|Elenco articoli con quantità
  2| Elenco articoli senza quantità
Se viene selezionata l’opzione % su valore convenzionale per cliente, allora fisso su tutte le righe del contratto questo valore
La voce % su valore convenzionale per articolo va eliminata dalle testate
La voce Raggruppato su unico articolo diventa un checkbox, cliccabile solo se Tipo canone vale Nessuno

Tipo forfait
Il campo Tipo forfait e i campi a lui associati vanno eliminati delle testate dei contratti
Note: in fatturazione vanno gestiti Elenco articoli senza quantità il raggruppamento su unico articolo come checkbox; va gestito inoltre Importo minimo fatturabile [imponibile]

Flag vari
- Il flag stampa riepilogo consegne è sempre attivo
- I flags riferimenti bolle e stampa come da elenco consegne sono esclusivi

Varie
Eliminare la causale di default dalle testate
Aggiungere la voce Misto tra le voci del Tipo imballo
Eliminare i campi Num. Utente e Num. Etichette
Se Ritiro automatico dotazione temporanea non è flaggato in testata e cerco di flaggarlo su una riga, emettere un warning

Contratti - Righe
Prezzo
Il campo prezzo è sempre abilitato ma non obbligatorio
Proposta prezzo:
Quando carico un articolo su un contratto controllo il listino del cliente (CFVEN), poi cerco l’articolo su RCONDV in base al codice listino
Se qui trovo il prezzo lo prendo e lo propongo sul contratto; altrimenti scrivo sul contratto quello salvato in anagrafica articoli, segnalando con un warning; se l’articolo non appartiene a nessun listino, allora prendo il prezzo dall’anagrafica articoli senza segnalare niente.

Valore convenzionale
Il campo valore convenzionale è sempre imputabile e varrà salvato nel costo standard in anagrafica (campo che cambierà nome per le lavanderie)

Pezzi per confezione
Il campo Pezzi per confezione diventa Pezzi per pacco

Tipo forfait
Il campo Tipo forfait rimane solo sulle righe e:
- Nessuno: nessun comportamento particolare
- Valore fisso: Importo fisso obbligatorio
- Nolo: Prezzo nolo obbligatorio
- Ciclaggio: nessun comportamento particolare
- % su valore convenzionale per articolo: nessun comportamento particolare
- Fisso su dotazione iniziale: importo fisso obbligatorio

Modifica dotazioni
In realtà sono sempre modificabili, ma quando li modifico manualmente devo emettere un warning “Non lamentarti se poi i conti non tornano”


git-svn-id: svn://10.65.10.50/trunk@19010 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-06-11 11:27:01 +00:00
parent 5508c0a2a1
commit 3c2ccd846c
2 changed files with 127 additions and 66 deletions

View File

@ -2,11 +2,11 @@
#include <defmask.h>
#include <execp.h>
#include <progind.h>
#include <relapp.h>
#include "lvlib.h"
#include "../cg/cglib01.h"
#include "../mg/clifogiac.h"
#include "../ve/rcondv.h"
#include "lv0400.h"
@ -269,55 +269,45 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
return false;
}
break;
case F_TIPOFORFTE:
case F_NOLCICTE:
case F_VCARTCLITE:
case F_TIPOCAN:
{
//copio il valore dei campi in questione della testata su tutte le righe se F_TIPOFORFTE è diverso da NESSUNO,
//altrimente lascio quello che c'è
const int tipoforfte = atoi(get(F_TIPOFORFTE));
//copio il valore del campo in questione della testata su tutte le righe se F_TIPOCAN vale
//% su valore convenzionale per cliente, altrimente lascio quello che c'è
const int tipocan = atoi(get(F_TIPOCAN));
if (e == fe_modify || e == fe_init)
{
TSheet_field& ss = sfield(F_RIGHE);
//recupero le posizioni dei campi che devo modificare
const int pos_tipoforf = ss.cid2index(S_TIPOFORF);
const int pos_nolcic = ss.cid2index(S_NOLCIC);
const int pos_tipoforf = ss.cid2index(S_TIPOFORF);
const int pos_vcartcli = ss.cid2index(S_VCARTCLI);
if (tipoforfte > 0)
if (tipocan == 2)
{
//recupero i valori che devo copiare
const char nolcic = get(F_NOLCICTE)[0];
const char vcartcli = get(F_VCARTCLITE)[0];
FOR_EACH_SHEET_ROW(ss, r, row)
{
TToken_string& riga = ss.row(r);
//scrivo i valori alle posizioni corrette
riga.add(tipoforfte, pos_tipoforf);
riga.add(nolcic, pos_nolcic);
riga.add(vcartcli, pos_vcartcli);
riga.add(4, pos_tipoforf);
riga.add('C', pos_vcartcli);
//disabilito le celle interessate
ss.disable_cell(r, pos_tipoforf);
ss.disable_cell(r, pos_nolcic);
ss.disable_cell(r, pos_vcartcli);
}
field(F_TIPOFORF).disable();
field(F_NOLCIC).disable();
field(F_VCARTCLI).disable();
}
else
{
FOR_EACH_SHEET_ROW(ss, r, row)
{
TToken_string& riga = ss.row(r);
ss.enable_cell(r, pos_tipoforf);
ss.enable_cell(r, pos_nolcic);
TToken_string& riga = ss.row(r);
//scrivo i valori alle posizioni corrette
riga.add(0, pos_tipoforf);
ss.enable_cell(r, pos_tipoforf);
ss.enable_cell(r, pos_vcartcli);
}
field(F_TIPOFORF).enable();
field(F_NOLCIC).enable();
field(F_TIPOFORF).enable();
field(F_VCARTCLI).enable();
}
ss.force_update();
@ -326,6 +316,39 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
}
}
break;
case F_TIPOFORF:
{
//se questo campo risulta modificato, lo copio in alto e forzo l'update
if (e == fe_modify || e == fe_init)
{
TSheet_field& ss = sfield(F_RIGHE);
TToken_string& riga = ss.row(ss.selected());
riga.add(o.get(), ss.cid2index(S_TIPOFORF));
if (ss.mask().get_int(F_TIPOCAN) != 2)
{
riga.add('A', ss.cid2index(S_VCARTCLI));
ss.disable_cell(ss.selected(), ss.cid2index(S_VCARTCLI));
}
ss.force_update();
}
}
break;
case F_RITAUDTTMPRIG:
{
//obbligo a settare il flag prima in testata, altrimenti non lo lascio settare per le righe
if (e == fe_modify || e == fe_init)
{
if (o.get()[0] == 'X')
{
if (field(F_RITAUDTTMP).get()[0] != 'X')
{
warning_box("E' necessario prima attivare il ritiro automatico della dotazione temporanea in testata");
o.set("");
}
}
}
}
break;
case S_CODART:
if (!o.empty()) //se il campo risulta pieno
{
@ -335,6 +358,59 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
TSheet_field& ss = sfield(F_RIGHE);
TMask& m = o.mask(); // maschera di riga!
//PROPONI PREZZO
TToken_string key;
key.add('C');
key.add(field(F_CODCF).get());
const TRectype& cfven = cache().get(LF_CFVEN, key);
bool trvlst = false;
if (!cfven.empty())
{
//se è settata la categoria merceologica, leggo sia il listino che la cat merc, altrimenti solo il listino
TString8 codlis = cfven.get(CFV_CODLIST);
TString8 catven;
TConfig* configve = new TConfig(CONFIG_DITTA,"ve");
const char gesliscv = configve->get_char("GESLISCV");
if (gesliscv != 'X')
catven = "";
else
catven = cfven.get(CFV_CATVEN);
//cerco il prezzo sul listino
key.cut(0);
key.add('L'); //tipo
key.add(catven); //catven
key.add(""); //tipocf
key.add(""); //codcf
key.add(codlis); //codlis
key.add('A'); //tiporiga
key.add(codart); //codriga
key.add(""); //um
key.add(""); //nscagl
const TRectype& rcondv = cache().get(LF_RCONDV, key);
if (!rcondv.empty())
{
m.set(S_PREZZOST, rcondv.get_real(RCONDV_PREZZO));
trvlst = true;
}
else
warning_box("Non esiste questo articolo sul listino; "
"come prezzo verrà proposto il valore convenzionale dell'articolo");
}
else
trvlst = false; //probabilmente istruzione inutile
//se non ho trovato un listino, o se non c'è un listino impostato
//propongo come prezzo il valore convenzionale
if (!trvlst)
{
const TRectype& anamag = cache().get(LF_ANAMAG, codart);
m.set(S_PREZZOST, anamag.get_real(ANAMAG_COSTSTD));
}
//se ho scritto un articolo diverso da quello che esisteva prima
//e se si desidera veramente modificarlo, allora permetto la modifica
//e forzo l'updatre della riga, altrimenti riscrivo l'articolo che c'era prima
@ -344,7 +420,7 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
if (!yesno_box("Si desidera veramente modificare l'articolo %s",(const char*) _artrig))
{
m.set(S_CODART,_artrig);
TToken_string& row=ss.row(ss.selected());
TToken_string& row = ss.row(ss.selected());
row.add(_artrig, 0);
ss.force_update(ss.selected());
}
@ -362,6 +438,20 @@ bool TContratti_msk::on_field_event(TOperable_field& o,TField_event e,long jolly
on_art_select();
}
break;
case S_CONG:
case S_DOTIN:
case S_DOTOD:
case S_DOTTMP:
{
if (e == fe_modify)
{
TString str;
str << "ATTENZIONE: Una quantità risulta modificata a mano; dopo questa operazione i totali dei movimenti"
<< "di magazzino potrebbero non corrispondere ai numeri qui salvati";
warning_box(str);
}
}
break;
case DLG_PLANNING:
//se viene premuto il bottone "Giri", lancia lv0500 (generatore automatico dei giri)
if (e == fe_button && edit_mode())

View File

@ -181,11 +181,11 @@ BEGIN
ITEM "1|A valore fisso"
MESSAGE HIDE,1@|SHOW,F_IMPFISART|ENABLE,F_IMPFISART|DISABLE,3@|HIDE,F_MINCIC|HIDE,F_PREZNOL
ITEM "2|Nolo"
MESSAGE SHOW,F_NOLCIC|HIDE,F_VCARTCLI|DISABLE,F_IMPFISART|HIDE,F_IMPFISART|DISABLE,3@|HIDE,F_MINCIC|SHOW,F_PREZNOL
MESSAGE SHOW,F_NOLCIC|DISABLE,F_IMPFISART|HIDE,F_IMPFISART|DISABLE,3@|HIDE,F_MINCIC|SHOW,F_PREZNOL
ITEM "3|Ciclaggio"
MESSAGE SHOW,F_NOLCIC|HIDE,F_VCARTCLI|SHOW,F_IMPFISART|DISABLE,F_IMPFISART|DISABLE,3@|SHOW,F_MINCIC|HIDE,F_PREZNOL
MESSAGE SHOW,F_NOLCIC|SHOW,F_IMPFISART|DISABLE,F_IMPFISART|DISABLE,3@|SHOW,F_MINCIC|HIDE,F_PREZNOL
ITEM "4|% sul val. convenz."
MESSAGE SHOW,F_NOLCIC|SHOW,F_VCARTCLI|SHOW,F_IMPFISART|DISABLE,F_IMPFISART|ENABLE,3@|HIDE,F_MINCIC|HIDE,F_PREZNOL
MESSAGE SHOW,F_NOLCIC|SHOW,F_IMPFISART|DISABLE,F_IMPFISART|ENABLE,3@|HIDE,F_MINCIC|HIDE,F_PREZNOL
ITEM "5|Fisso su dot. iniziale"
MESSAGE HIDE,1@|SHOW,F_IMPFISART|ENABLE,F_IMPFISART|DISABLE,3@|HIDE,F_MINCIC|HIDE,F_PREZNOL
END
@ -204,17 +204,20 @@ BEGIN
ITEM "A|Articolo"
ITEM "C|Cliente"
GROUP 1
FLAGS "G"
END
CURRENCY F_IMPFISART 15
BEGIN
PROMPT 1 15 "Imp.fisso "
CHECTYPE REQUIRED
END
CURRENCY F_PREZNOL 15
BEGIN
PROMPT 1 15 "Prz. Nolo "
FLAGS "U"
CHECKTYPE REQUIRED
END
CURRENCY F_VALCONV 15
@ -344,6 +347,7 @@ CURRENCY F_IMPFIX 10
BEGIN
PROMPT 49 2 "Importo fisso "
FIELD IMPFIX
CHECKTYPE REQUIRED
END
BOOLEAN F_FORFNOCONS
@ -444,42 +448,6 @@ BEGIN
FIELD TIPOLIS
END
LISTBOX F_TIPOFORFTE 1 25
BEGIN
PROMPT 2 9 "Forfait "
ITEM "0|Nessuno"
MESSAGE HIDE,F_NOLCICTE|HIDE,F_VCARTCLITE
ITEM "1|A valore fisso"
MESSAGE HIDE,F_NOLCICTE|HIDE,F_VCARTCLITE
ITEM "2|Nolo"
MESSAGE SHOW,F_NOLCICTE|HIDE,F_VCARTCLITE
ITEM "3|Ciclaggio"
MESSAGE SHOW,F_NOLCICTE|HIDE,F_VCARTCLITE
ITEM "4|% sul val. convenz."
MESSAGE SHOW,F_NOLCICTE|SHOW,F_VCARTCLITE
ITEM "5|Fisso su dot. iniziale"
MESSAGE HIDE,F_NOLCICTE|HIDE,F_VCARTCLITE
FLAGS "G"
END
LISTBOX F_NOLCICTE 1 20
BEGIN
PROMPT 43 9 "In base a "
ITEM "I|Dot. iniziale"
ITEM "O|Dot. odierna"
FIELD NOLCIC
GROUP 1
END
LISTBOX F_VCARTCLITE 1 20
BEGIN
PROMPT 2 10 "Per "
ITEM "A|Articolo"
ITEM "C|Cliente"
FIELD VCARTCLI
GROUP 1
END
GROUPBOX DLG_NULL 79 11
BEGIN
PROMPT 1 12 ""
@ -657,7 +625,7 @@ BEGIN
DISPLAY "Descrizione@50" DESCR
OUTPUT S_CODART CODART
OUTPUT S_DESCR DESCR
OUTPUT S_PREZZOST COSTSTD
OUTPUT S_VALCONV COSTSTD
OUTPUT S_PPCONF PPCONF
FIELD CODART
CHECKTYPE REQUIRED
@ -751,6 +719,7 @@ BEGIN
ITEM "A|Articolo"
ITEM "C|Cliente"
FIELD VCARTCLI
FLAGS "D"
GROUP 1
END
@ -794,12 +763,14 @@ BEGIN
PROMPT 50 10 "Prezzo nolo"
FLAGS "U"
FIELD PREZNOL
CHECKTYPE REQUIRED
END
CURRENCY S_IMPFISART 15
BEGIN
PROMPT 2 11 "Imp.fisso "
FIELD IMPFISART
CHECKTYPE REQUIRED
END
CURRENCY S_VALCONV 15
@ -921,7 +892,7 @@ END
NUMBER S_PPCONF 15 5
BEGIN
PROMPT 2 1 "Pezzi per Confezione "
PROMPT 2 1 "Pezzi per Pacco "
FLAGS "DG"
END