Patch level : 10.0 1050

Files correlati     : cg2100c.msk cg7200a.rep cg7200a.msk cgmenu.men
Ricompilazione Demo : [ ]
Commento            :
Modificata stampa movimenti per imponibile limite
Aggiunta a menu gestione modulo FE


git-svn-id: svn://10.65.10.50/branches/R_10_00@22376 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2011-07-06 15:36:32 +00:00
parent fbcd8407b8
commit cc8cff00df
7 changed files with 90 additions and 163 deletions

View File

@ -424,7 +424,6 @@ BEGIN
PROMPT 1 12 "Contratto "
FLAGS "U"
FIELD CONTRATTO
MODULE cg,fe
USE &FECON
INPUT CODTAB[1,1] "C"
INPUT CODTAB[2,7] F_CLIENTE SELECT
@ -443,7 +442,6 @@ BEGIN
PROMPT 1 12 "Contratto "
FLAGS "U"
FIELD CONTRATTO
MODULE cg,fe
USE &FECON
INPUT CODTAB[1,1] "F"
INPUT CODTAB[2,7] F_FORNITORE SELECT

View File

@ -1,6 +1,4 @@
#include <applicat.h>
#include <report.h>
#include <strings.h>
#include "../ba/ba8500.h"

View File

@ -11,10 +11,8 @@
#include <occas.h>
#include <rmoviva.h>
#include "cglib01.h"
#include "cg7200a.h"
#include "../ba/ba8500.h"
///////////////////////////////////////////////////////////
// Recordset
@ -40,20 +38,21 @@ TPrint_x_imponibile_recordset::TPrint_x_imponibile_recordset()
create_field("Reg", -1, 3, _alfafld, true);
create_field("Protiva", -1, 6, _longfld, true);
create_field("Tipo", -1, 1, _alfafld, true);
create_field("Totdoc", -1, 18, _realfld, true);
//campi da LF_CLIFO
create_field("Codcf", -1, 6, _longfld, true);
create_field("Ragsoc", -1, 50, _alfafld, true);
create_field("Piva", -1, 13, _alfafld, false);
create_field("Cofi", -1, 16, _alfafld, false);
create_field("Totdoc", -1, 18, _realfld, true);
create_field("Stato", -1, 40, _alfafld, false);
//campi da LF_RMOVIVA
create_field("Imponibile", -1, 18, _realfld, true);
create_field("Imposta", -1, 18, _realfld, false);
create_field("Tipoiva", -1, 2, _alfafld, true);
create_field("Imponibile_no", -1, 18, _realfld, false); //normale
create_field("Imponibile_ni", -1, 18, _realfld, false); //non imponibile
create_field("Imponibile_es", -1, 18, _realfld, false); //esente
create_field("Imponibile_co", -1, 18, _realfld, false); //corrispettivo
create_field("Imposta_co", -1, 18, _realfld, false); //imposta corrispettivo
create_field("Imponibile_ne", -1, 18, _realfld, false); //non esposta
create_field("Imponibile_ma", -1, 18, _realfld, false); //margine
}
///////////////////////////////////////////////////////////
@ -80,6 +79,8 @@ TPrint_x_imponibile_report::TPrint_x_imponibile_report()
class TPrint_x_imponibile_mask : public TAutomask
{
real _limite;
protected:
bool convalida_clifo(const char tipocf, const long codcf);
bool aggiungi_movimento(const TRectype& rec, TPrint_x_imponibile_recordset& output_recordset);
@ -92,29 +93,8 @@ public:
bool TPrint_x_imponibile_mask::convalida_clifo(const char tipocf, const long codcf)
{
if (tipocf <= ' ')
return false;
TToken_string key_clifo;
key_clifo.add(tipocf);
key_clifo.add(codcf);
const TRectype& rec_clifo = cache().get(LF_CLIFO, key_clifo);
const int alleg_clifo = rec_clifo.get_int(CLI_ALLEG);
//solo per clifo esteri (alleg = 5)
if (alleg_clifo == 5)
{
if (tipocf == 'F') // tutti i fornitori esteri vanno esclusi (importazioni)
return false;
else // vanno esclusi solo i clienti esteri di stati pirata
{
const TString& stato_clifo = rec_clifo.get(CLI_STATOCF);
const TRectype& rec_sta = cache().get("%STA", stato_clifo);
if (rec_sta.get_bool("B0")) //cliente in stato a fiscalita' agevolata (stato pirata!) -> non ci va
return false;
}
}
return true; //se arriva qui il clifo è da considerare
// Non eseguo voutamente i test propri del modulo FE
return codcf > 0L && (tipocf == 'C' || tipocf == 'F');
}
bool TPrint_x_imponibile_mask::aggiungi_movimento(const TRectype& rec, TPrint_x_imponibile_recordset& output_recordset)
@ -126,65 +106,36 @@ bool TPrint_x_imponibile_mask::aggiungi_movimento(const TRectype& rec, TPrint_x_
return false;
//se il cliente ha superato l'esame di ammissione si parte!
//vanno esclusi gli scontrini anteriori al 30-04-2011 (evadete finchè potete...)
const TString4 tipodoc = rec.get(MOV_TIPODOC);
if (tipodoc == "SC" && rec.get_date(MOV_DATAREG) <= TDate(30, 4, 2011))
return false;
const TString& keytok = rec.get(MOV_NUMREG);
TRecord_array righe_iva(keytok, LF_RMOVIVA);
real tot_imponibile, tot_impon_no, tot_impon_ni, tot_impon_es, tot_impon_co;
real tot_imposta, tot_imposta_co;
real tot_imponibile, tot_imposta;
real tot_impon_no, tot_impon_ni, tot_impon_es, tot_impon_ne, tot_impon_ma;
TString4 tipoiva; //dichiarata qui perchè serve nella scrittura dell' output_recordset
//calcolo di imponibile ed imposta di tutte le righe iva del movimento
for (int r = righe_iva.last_row(); r > 0; r = righe_iva.pred_row(r))
{
const TRectype& rmi = righe_iva.row(r);
real imponibile = rmi.get_real(RMI_IMPONIBILE);
real imposta = rmi.get_real(RMI_IMPOSTA);
const TString& codiva = rmi.get(RMI_CODIVA);
TCodiceIVA ci(codiva);
const real imponibile = rmi.get_real(RMI_IMPONIBILE);
const real imposta = rmi.get_real(RMI_IMPOSTA);
//caso speciale degli scontrini (corrispettivi?)
if (tipodoc == "SC")
TCodiceIVA ci(rmi.get(RMI_CODIVA));
switch(ci.allegato(tipocf))
{
if (imposta.is_zero()) //se l'imposta non è specificata..
{
imposta = ci.scorpora(imponibile); //questo metodo crea l'imposta e riduce l'imponibile!
}
tot_impon_co += imponibile;
tot_imposta_co += imposta;
case 2: tot_impon_ni += imponibile; break;
case 3: tot_impon_es += imponibile; break;
case 4: tot_impon_ne += imponibile; break;
case 5: tot_impon_ma += imponibile; break;
default: tot_impon_no += imponibile; break;
}
else
{
tipoiva = ci.get("S1");
//operazioni oggetto di comunicazione obbligatoria all'anagrafe tributaria (es: bollette luce)
//ricordare all'utonto che il flag va attivato nella tabella IVA del codice corrispondente
const bool com_obbl = ci.get_bool("B6");
//non ci vanno manco quelli soggetti all'articolo 8 (del dpr 26/10/1972)
const bool art_8 = ci.get("S2") == "20" && ci.get("S3") == "1";
if (com_obbl || art_8)
imponibile = imposta = ZERO;
else
{
if (tipoiva == "NI" || tipoiva == "NS")
tot_impon_ni += imponibile;
else
if (tipoiva == "ES")
tot_impon_es += imponibile;
else
tot_impon_no += imponibile;
}
}
tot_imponibile += imponibile;
tot_imposta += imposta;
}
if (tot_imponibile > get_real(F_LIMITE))
if (abs(tot_imponibile) > _limite)
{
output_recordset.new_rec("");
@ -192,14 +143,14 @@ bool TPrint_x_imponibile_mask::aggiungi_movimento(const TRectype& rec, TPrint_x_
output_recordset.set("Datareg", rec.get_date(MOV_DATAREG));
output_recordset.set("Datadoc", rec.get_date(MOV_DATADOC));
output_recordset.set("Numdoc", rec.get_long(MOV_NUMDOC));
output_recordset.set("Tipodoc", tipodoc);
output_recordset.set("Tipodoc", rec.get(MOV_TIPODOC));
output_recordset.set("Codcaus", rec.get(MOV_CODCAUS));
output_recordset.set("Descr", rec.get(MOV_DESCR));
output_recordset.set("Reg", rec.get(MOV_REG));
output_recordset.set("Protiva", rec.get_long(MOV_PROTIVA));
output_recordset.set("Tipo", rec.get(MOV_TIPO));
output_recordset.set("Codcf", codcf);
TString80 ragsoc;
TString80 ragsoc, stato;
TString16 piva, cofi;
const TString16 ocfpi = rec.get(MOV_OCFPI); // è uno stupido cliente occasionale?
if (ocfpi.full())
@ -208,6 +159,7 @@ bool TPrint_x_imponibile_mask::aggiungi_movimento(const TRectype& rec, TPrint_x_
ragsoc = rec_occas.get(OCC_RAGSOC);
piva = rec_occas.get(OCC_PAIV);
cofi = rec_occas.get(OCC_COFI);
stato = cache().get("%STA", rec_occas.get(OCC_STATO), "S0");
}
else
{
@ -218,19 +170,21 @@ bool TPrint_x_imponibile_mask::aggiungi_movimento(const TRectype& rec, TPrint_x_
ragsoc = rec_clifo.get(CLI_RAGSOC);
piva = rec_clifo.get(CLI_PAIV);
cofi = rec_clifo.get(CLI_COFI);
stato = cache().get("%STA", rec_clifo.get(CLI_STATOCF), "S0");
}
output_recordset.set("Ragsoc", ragsoc);
output_recordset.set("Piva", piva);
output_recordset.set("Cofi", cofi);
output_recordset.set("Stato", stato);
output_recordset.set("Totdoc", rec.get_real(MOV_TOTDOC));
output_recordset.set("Imponibile", tot_imponibile);
output_recordset.set("Imposta", tot_imposta);
output_recordset.set("Tipoiva", tipoiva);
output_recordset.set("Imponibile_no", tot_impon_no);
output_recordset.set("Imponibile_ni", tot_impon_ni);
output_recordset.set("Imponibile_es", tot_impon_es);
output_recordset.set("Imponibile_co", tot_impon_co);
output_recordset.set("Imposta_co", tot_imposta_co);
output_recordset.set("Imponibile_ne", tot_impon_ne);
output_recordset.set("Imponibile_ma", tot_impon_ma);
}
return false;
@ -242,10 +196,11 @@ void TPrint_x_imponibile_mask::elabora()
const TString& tipoelenco = get(F_TIPOELENCO);
const long codcf = get_long(F_CODCF);
const bool clifo_spec = codcf > 0L;
const int anno = get_int(F_ANNO);
const TDate dataini = get_date(F_DATAINI);
const TDate datafine = get_date(F_DATAFIN);
const real limite = get_real(F_LIMITE);
_limite = get_real(F_LIMITE);
TString query;
@ -280,18 +235,22 @@ void TPrint_x_imponibile_mask::elabora()
const long movimenti_recset_items = movimenti_recset.items();
//recordset di output su cui scrivere i record validi da mandare in stampa!
TPrint_x_imponibile_recordset* output_recordset = new TPrint_x_imponibile_recordset;
//solita progind per intrattenere l'utonto
TProgind pi(movimenti_recset_items, TR("Scansione movimenti in corso..."), true, true);
//giro su tutti i movimenti contabili che soddisfano la query
for (bool ok = movimenti_recset.move_first(); ok; ok = movimenti_recset.move_next())
if (movimenti_recset_items > 0) // Provoca la chiusura della TProgind durante l'anteprima successiva
{
if (!pi.addstatus(1))
break;
//solita progind per intrattenere l'utonto
TProgind pi(movimenti_recset_items, TR("Scansione movimenti in corso..."), true, true);
//metodo che decide se aggiungere i dati di un movimento all'output recordset
//al suo interno ci sono tutti i filtri di legge!
aggiungi_movimento(movimenti_recset.cursor()->curr(), *output_recordset);
//giro su tutti i movimenti contabili che soddisfano la query
for (bool ok = movimenti_recset.move_first(); ok; ok = movimenti_recset.move_next())
{
if (!pi.addstatus(1))
break;
//metodo che decide se aggiungere i dati di un movimento all'output recordset
//al suo interno ci sono tutti i filtri di legge!
aggiungi_movimento(movimenti_recset.cursor()->curr(), *output_recordset);
}
}
#ifdef DBG
@ -310,35 +269,17 @@ bool TPrint_x_imponibile_mask::on_field_event(TOperable_field& o, TField_event e
{
switch (o.dlg())
{
case F_ANNO:
if (e == fe_modify)
case F_DATASTAMPA:
if (e == fe_init)
{
//in base all'anno varia il limite dell'imponibile da considerare
const int anno = o.get_long();
if (anno <= 2010)
set(F_LIMITE, "25000");
else
set(F_LIMITE, "3000");
//cambiando l'anno propone in automatico il dadata adata
const TDate ini_anno(1, 1, anno);
set(F_DATAINI, ini_anno);
const TDate fine_anno(31, 12, anno);
set(F_DATAFIN, fine_anno);
TDate ds = o.get(); ds.addyear(-1);
TDate dal(1, 1, ds.year());
TDate al(31,12, ds.year());
set(F_DATAINI, dal);
set(F_DATAFIN, al);
}
break;
case F_DATAINI:
case F_DATAFIN:
if (e == fe_modify || e == fe_close)
{
const TDate data = get_date(o.dlg());
const int anno = get_int(F_ANNO);
if (data.year() != anno)
return error_box("La data deve appartenere all'anno selezionato!");
}
break;
default:
break;
default: break;
}
return true;
}
@ -352,7 +293,7 @@ TPrint_x_imponibile_mask::TPrint_x_imponibile_mask() : TAutomask("cg7200a")
// Applicazione
///////////////////////////////////////////////////////////
class TPrint_x_imponibile : public TKlarkKent_app
class TPrint_x_imponibile : public TSkeleton_application
{
protected:

View File

@ -1,7 +1,7 @@
#define F_CODDITTA 201
#define F_RAGSOC 202
#define F_DATASTAMPA 203
#define F_ANNO 204
#define F_LIMITE 205
#define F_TIPODATE 206
#define F_DATAINI 207

View File

@ -19,8 +19,10 @@
<field x="73" y="0.5" type="Testo" width="10" pattern="1" text="Cod. Fisc.">
<font italic="1" face="Arial" bold="1" size="8" />
</field>
<field x="122" y="0.5" type="Testo" align="center" width="11" pattern="1" text="Imponibili" />
<field x="147" y="0.5" type="Testo" align="center" width="11" pattern="1" text="Corrispettivi" />
<field x="90" y="0.5" type="Testo" width="15" pattern="1" text="Stato di residenza">
<font italic="1" face="Arial" bold="1" size="8" />
</field>
<field x="132" y="0.5" type="Testo" align="center" width="11" pattern="1" text="Imponibili" />
<field x="2" y="1.5" type="Testo" align="right" width="7" pattern="1" text="N.Reg." />
<field x="10.5" y="1.5" type="Testo" align="center" width="10" pattern="1" text="Data Reg." />
<field x="21" y="1.5" type="Testo" width="4" pattern="1" text="Reg." />
@ -32,13 +34,12 @@
<field x="79" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Tot. Doc." />
<field x="91" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Imponibile" />
<field x="101" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Imposta" />
<field x="111.5" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Normale" />
<field x="112" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Normale" />
<field border="2" x="111.5" y="1.5" type="Linea" pattern="1" />
<field x="121.5" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Non Impon." />
<field x="131.5" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Esente" />
<field x="142" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Imponibile" />
<field border="2" x="142" y="1.5" type="Linea" pattern="1" />
<field x="152" y="1.5" type="Testo" align="right" width="8" pattern="1" text="Imposta" />
<field x="122" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Non Impon." />
<field x="132" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Esente" />
<field x="142" y="1.5" type="Testo" align="right" width="10" pattern="1" text="Non esp." />
<field x="152" y="1.5" type="Testo" align="right" width="10" pattern="1" text="A margine" />
<field border="1" x="1" y="2.5" type="Linea" width="168" height="0" pattern="1" />
</section>
<section type="Head" level="1" pattern="1">
@ -51,12 +52,7 @@
<font face="Arial" bold="1" size="8" />
<source>#DESCF</source>
</field>
<field x="2" y="5.5" type="Testo" width="5" pattern="1" text="Anno:" />
<field x="7" y="5.5" type="Numero" align="right" width="5" pattern="1">
<font face="Arial" bold="1" size="8" />
<source>#ANNO</source>
</field>
<field x="17" y="5.5" type="Testo" width="18" pattern="1" text="Valore limite imponibile:" />
<field x="2" y="5.5" type="Testo" width="18" pattern="1" text="Valore limite imponibile:" />
<field x="50" y="5.5" type="Testo" width="14" pattern="1" text="Ordinamento per:" />
<field x="64" y="5.5" type="Array" width="20" pattern="1">
<font face="Arial" bold="1" size="8" />
@ -84,7 +80,7 @@
<li Value="Fornitori" Code="F" />
</list>
</field>
<field x="35" y="5.5" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@">
<field x="25" y="5.5" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@">
<font face="Arial" bold="1" size="8" />
<source>#LIMITE</source>
</field>
@ -122,6 +118,9 @@ THEN</prescript>
<field x="73" y="0.75" type="Stringa" width="16" pattern="1">
<source>Cofi</source>
</field>
<field x="90" y="0.75" type="Stringa" width="40" pattern="1">
<source>Stato</source>
</field>
</section>
<section type="Body" pattern="1" />
<section type="Body" level="1" pattern="1">
@ -175,11 +174,11 @@ THEN</prescript>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F1.206</prescript>
</field>
<field x="142" type="Valuta" align="right" width="10" pattern="1" text="#########,@@">
<source>Imponibile_co</source>
<source>Imponibile_ne</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F1.207</prescript>
</field>
<field x="152" type="Valuta" align="right" width="8" pattern="1" text="#########,@@">
<source>Imposta_co</source>
<field x="152" type="Valuta" align="right" width="10" pattern="1" text="#########,@@">
<source>Imponibile_ma</source>
<prescript description="B1.0 PRESCRIPT">MESSAGE ADD,F1.208</prescript>
</field>
</section>
@ -198,27 +197,25 @@ THEN</prescript>
<font face="Arial" bold="1" size="8" />
<field border="2" x="1" y="1" type="Linea" width="168" height="0" pattern="1" />
<field border="2" x="111.5" y="1" type="Linea" height="2.5" pattern="1" />
<field border="2" x="142" y="1" type="Linea" height="2.5" pattern="1" />
<field x="65" y="1.5" type="Testo" width="10" pattern="1" text="TOTALI" />
<field x="121" y="1.5" type="Testo" align="center" bg_color="#000000" width="12" pattern="1" text="Imponibili" />
<field x="146.5" y="1.5" type="Testo" align="center" width="12" pattern="1" text="Corrispettivi" />
<field x="132" y="1.5" type="Testo" align="center" bg_color="#000000" width="12" pattern="1" text="Imponibili" />
<field x="74.5" y="2.5" type="Testo" align="right" bg_color="#000000" width="14" pattern="1" text="Tot. Documento" />
<field x="88.5" y="2.5" type="Testo" align="right" bg_color="#000000" width="12" pattern="1" text="Imponibile" />
<field x="100.5" y="2.5" type="Testo" align="right" bg_color="#000000" width="10" pattern="1" text="Imposta" />
<field x="110.5" y="2.5" type="Testo" align="right" bg_color="#C0C0C0" width="11" pattern="1" text="Normale" />
<field x="121.5" y="2.5" type="Testo" align="right" width="10" pattern="1" text="Non Imp." />
<field x="131.5" y="2.5" type="Testo" align="right" width="10" pattern="1" text="Esente" />
<field x="141.5" y="2.5" type="Testo" align="right" width="10" pattern="1" text="Imponib." />
<field x="151.5" y="2.5" type="Testo" align="right" width="8" pattern="1" text="Imposta" />
<field x="112" y="2.5" type="Testo" align="right" bg_color="#C0C0C0" width="10" pattern="1" text="Normale" />
<field x="122" y="2.5" type="Testo" align="right" width="10" pattern="1" text="Non Imp." />
<field x="132" y="2.5" type="Testo" align="right" width="10" pattern="1" text="Esente" />
<field x="142" y="2.5" type="Testo" align="right" width="10" pattern="1" text="Non esp." />
<field x="152" y="2.5" type="Testo" align="right" width="10" pattern="1" text="Margine" />
<field border="2" x="1" y="3.5" type="Linea" width="168" height="0" pattern="1" />
<field x="75" y="3.75" type="Valuta" align="right" width="14" id="201" pattern="1" text="#########,@@" />
<field x="89" y="3.75" type="Valuta" align="right" width="12" id="202" pattern="1" text="#########,@@" />
<field x="101" y="3.75" type="Valuta" align="right" width="10" id="203" pattern="1" text="#########,@@" />
<field x="111" y="3.75" type="Valuta" align="right" width="11" id="204" pattern="1" text="#########,@@" />
<field x="112" y="3.75" type="Valuta" align="right" width="10" id="204" pattern="1" text="#########,@@" />
<field x="122" y="3.75" type="Valuta" align="right" width="10" id="205" pattern="1" text="#########,@@" />
<field x="132" y="3.75" type="Valuta" align="right" width="10" id="206" pattern="1" text="#########,@@" />
<field x="142" y="3.75" type="Valuta" align="right" width="10" id="207" pattern="1" text="#########,@@" />
<field x="152" y="3.75" type="Valuta" align="right" width="8" id="208" pattern="1" text="#########,@@" />
<field x="152" y="3.75" type="Valuta" align="right" width="10" id="208" pattern="1" text="#########,@@" />
</section>
<section type="Foot" level="2" pattern="1" />
<sql>USE MOV KEY 3</sql>

View File

@ -35,21 +35,6 @@ BEGIN
FIELD #DATASTAMPA
END
NUMBER F_ANNO 4
BEGIN
PROMPT 1 3 "Anno "
CHECKTYPE REQUIRED
FLAGS "U"
FIELD #ANNO
END
CURRENCY F_LIMITE 9
BEGIN
PROMPT 23 3 "Importo limite imponibile considerato "
FLAGS "D"
FIELD #LIMITE
END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 1 4 "@bParametri movimenti"
@ -125,6 +110,12 @@ BEGIN
FIELD #DESCF
END
CURRENCY F_LIMITE 9
BEGIN
PROMPT 1 12 "Importo limite per imponibile "
FIELD #LIMITE
END
ENDPAGE
ENDMASK

View File

@ -282,3 +282,5 @@ Flags = ""
Item_01 = "Comunicazione annuale dati IVA", "cg5 -7", "F"
Item_02 = "Quadro VT", "cg5 -8", "F"
Item_03 = "Elenco clienti\fornitori", "cg3 -8", "F"
Item_04 = "Comunicazione dati rilevanti", "fe0 -0", "F"
Item_05 = "Contratti per dati rilevanti", "fe0 -1 &CON", "F"