diff --git a/cg/cg2105.h b/cg/cg2105.h new file mode 100755 index 000000000..a4ef1ac13 --- /dev/null +++ b/cg/cg2105.h @@ -0,0 +1,72 @@ +#ifndef __CG2105_H__ +#define __CG2105_H__ + +#ifndef __CGSALDAC_H__ +#include "../cg/cgsaldac.h" +#endif + +#ifndef __AUTOMASK_H__ +#include +#endif + +class TNew_mask : public TAutomask +{ + bool _allow_fatt; + +protected: + virtual bool on_field_event(TOperable_field& f, TField_event e, long jolly); + +public: + void init(char tipocf, bool fatt, bool edit); + TNew_mask(char tipocf, bool fatt, bool edit); +}; + +class TGame_mask; + +class TPay_mask : public TMask +{ + TDate _datadoc, _datarat; + real _da_pagare, _pagabile; + +#ifndef __EXTRA__ + const TGame_mask* _parent; +#endif + tipo_movimento _tipomov; + + bool _assigned; + bool _can_solder; + bool _swap_ritsoc; + +protected: + static bool importo_handler(TMask_field& f, KEY k); + static bool importolire_handler(TMask_field& f, KEY k); + static bool saldo_handler(TMask_field& f, KEY k); + static bool datapag_handler(TMask_field& f, KEY k); + static bool conto_handler(TMask_field& f, KEY k); + static bool descr_handler(TMask_field& f, KEY k); + void gioca_cambi(int force = 0x0); + +#ifdef __EXTRA__ + static bool datareg_handler(TMask_field& f, KEY k); + static bool datadoc_handler(TMask_field& f, KEY k); + static bool numdoc_handler(TMask_field& f, KEY k); + static bool sezione_handler(TMask_field& f, KEY k); +#endif + +public: + void set_pag(const TRectype& oldpag, const TRiga_scadenze& scad, const TImporto& importo); + void get_pag(TRectype& oldpag, TRectype& somma) const; + + bool assigned() const { return _assigned; } + bool unassigned() const { return !_assigned; } + tipo_movimento tipo() const { return _tipomov; } + + void attiva_valuta(bool on); + + void init(const TGame_mask* parent, int mode); + TPay_mask(const TGame_mask* parent, int mode); + + virtual ~TPay_mask(); +}; + +#endif diff --git a/ps/ps1002.cpp b/ps/ps1002.cpp new file mode 100755 index 000000000..e5ae0708c --- /dev/null +++ b/ps/ps1002.cpp @@ -0,0 +1,16 @@ +#include + +#include "ps1002.h" + +int main(int argc, char** argv) +{ + int n = argc > 1 ? atoi(argv[1]+1) : 0; + switch(n) + { + case 0: ps1002100(argc, argv); break; //gestione rapida(?) delle righe documento Euroforesi + default: + ps1002100(argc, argv); break; + } + exit(0); + return 0; +} \ No newline at end of file diff --git a/ps/ps1002.h b/ps/ps1002.h new file mode 100755 index 000000000..85faf35b3 --- /dev/null +++ b/ps/ps1002.h @@ -0,0 +1 @@ +int ps1002100(int argc, char* argv[]); \ No newline at end of file diff --git a/ps/ps1002100.cpp b/ps/ps1002100.cpp new file mode 100755 index 000000000..f31d2ee48 --- /dev/null +++ b/ps/ps1002100.cpp @@ -0,0 +1,450 @@ +#include +#include +#include +#include +#include +#include + +#include "../ve/condv.h" +#include "../ve/rcondv.h" +#include "../ve/velib.h" + +#include "ps1002.h" +#include "ps1002100a.h" + + +class TDoc_cache : public TCache +{ + TString4 _codnum, _tipodoc; + int _anno; + long _codcf; + TDate _data; + +protected: + virtual void discarding(const THash_object* obj); + virtual TObject* key2obj(const char* key); + +public: + TDocumento& doc(const TToken_string& kdoc); + TDoc_cache(const char* codnum, const char* tipodoc, const TDate& datadoc, const long codcf); +}; + +//DISCARDING: salva un documento sul disco prima di eliminarlo dalla cache +void TDoc_cache::discarding(const THash_object* obj) +{ + TDocumento& doc = (TDocumento&)obj->obj(); + int err = doc.rewrite(); +} + +//KEY2OBJ:sceglie il documento giusto da disco in modo da poterlo continuare, o lo crea se non c'è +TObject* TDoc_cache::key2obj(const char* key) +{ + TDocumento* doc = NULL; + + TToken_string chiave(key); + + const char provv = chiave.get(0)[0]; + const int anno = chiave.get_int(1); + const TString& codnum = chiave.get(2); + const long ndoc = chiave.get_long(3); + + doc = new TDocumento(provv, anno, codnum, ndoc); + + if (ndoc <= 0) + { + doc->put(DOC_PROVV, 'D'); + doc->put(DOC_ANNO, _anno); + doc->put(DOC_CODNUM, _codnum); + doc->put(DOC_NDOC, 0); + doc->put(DOC_TIPODOC, _tipodoc); + doc->put(DOC_STATO, 1); + doc->put(DOC_DATADOC, _data); + doc->put(DOC_TIPOCF, 'C'); + doc->put(DOC_CODCF, _codcf); + } + + return doc; +} + +//DOC: restituisce un puntatore ad un documento identificato dalla chiave documento completa +TDocumento& TDoc_cache::doc(const TToken_string& kdoc) +{ + return *(TDocumento*)objptr(kdoc); +} + + +//metodo costruttore di una cache di 20 elementi +TDoc_cache::TDoc_cache(const char* codnum, const char* tipodoc, const TDate& datadoc, const long codcf) : TCache(13) +{ + _codnum = codnum; + _tipodoc = tipodoc; + _anno = datadoc.year(); + _data = datadoc; + _codcf = codcf; +} + +/////////////////////////////////////////////////////////// +// TAutomask +/////////////////////////////////////////////////////////// +class TEdit_rdocs_mask : public TAutomask +{ + int _pos_art, _pos_desc, _pos_um, _pos_qta, _pos_qtaev, _pos_prz, _pos_iva, _pos_lav, _pos_col, + _pos_dtprd, _pos_qtaprd, _pos_num, _pos_anno, _pos_provv, _pos_ndoc, _pos_nrig, _pos_desiva; + +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void fill_sheet(); + void save_sheet(); + const TString4 find_um(const TString& codart) const; + real find_prezzo_articolo(const TString& codart) const; + +public: + TEdit_rdocs_mask(); + ~TEdit_rdocs_mask() {}; +}; + +TEdit_rdocs_mask::TEdit_rdocs_mask() : TAutomask ("ps1002100a") +{ + //assegna le posizioni delle colonne dello sheet + TSheet_field& sf_righe = sfield(F_RIGHE); + _pos_art = sf_righe.cid2index(S_CODART); + _pos_desc = sf_righe.cid2index(S_DESCR); + _pos_um = sf_righe.cid2index(S_UM); + _pos_qta = sf_righe.cid2index(S_QTA); + _pos_qtaev = sf_righe.cid2index(S_QTAEVASA); + _pos_prz = sf_righe.cid2index(S_PREZZO); + _pos_iva = sf_righe.cid2index(S_CODIVA); + _pos_lav = sf_righe.cid2index(S_LAV); + _pos_col = sf_righe.cid2index(S_COLORE); + _pos_dtprd = sf_righe.cid2index(S_DATAPROD); + _pos_qtaprd = sf_righe.cid2index(S_QTAPROD); + _pos_num = sf_righe.cid2index(S_CODNUM); + _pos_anno = sf_righe.cid2index(S_ANNO); + _pos_provv = sf_righe.cid2index(S_PROVV); + _pos_ndoc = sf_righe.cid2index(S_NDOC); + _pos_nrig = sf_righe.cid2index(S_NRIGA); + + _pos_desiva = sf_righe.cid2index(S_DESIVA); +} + +bool TEdit_rdocs_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + //maschera principale + case F_RIGHE: + if (e == se_notify_add) //righe aggiunte + { + TToken_string& riga_sheet = sfield(o.dlg()).row(jolly); //riga nuova dello sheet + const TString& codnum = get(F_CODNUM); + riga_sheet.add(codnum, _pos_num); + const int anno = get_int(F_ANNO); + riga_sheet.add(anno, _pos_anno); + riga_sheet.add('D', _pos_provv); + } + + if (e == se_query_del) //righe da eliminare + { + //solo le righe senza NDOC ed NRIGA possono essere eliminate! + TToken_string& riga_sheet = sfield(o.dlg()).row(jolly); + const long ndoc = riga_sheet.get_long(_pos_ndoc); + const int nriga = riga_sheet.get_int(_pos_nrig); + return ndoc == 0L || nriga == 0; + } + break; + + //maschera di sheet + case S_CODART: + if (e == fe_modify) + { + //al cambio articolo deve proporre il codiva, la um, il prezzo + const TString& codart = o.get(); + const TString& um = find_um(codart); + o.mask().set(S_UM, um); + const TString& codiva = cache().get(LF_ANAMAG, codart, ANAMAG_CODIVA); + o.mask().set(S_CODIVA, codiva); + const real prezzo = find_prezzo_articolo(codart); + o.mask().set(S_PREZZO, prezzo); + } + break; + + //bottoni + case DLG_SELECT: //carica i record nello sheet in base al filtro di testata + if (e == fe_button) + { + if (check_fields()) + { + disable(-1); + enable(-2); + fill_sheet(); + } + } + break; + case DLG_CANCEL: + if (e == fe_button && jolly == 0) + { + disable(-2); + enable(-1); + sfield(F_RIGHE).destroy(); + return false; + } + break; + case DLG_SAVEREC: + if (e == fe_button) + { + save_sheet(); + fill_sheet(); + } + break; + default: + break; + } + return true; +} + +//cerca la um standard del codart +const TString4 TEdit_rdocs_mask::find_um(const TString& codart) const +{ + TToken_string key_umart; + key_umart.add(codart); + key_umart.add(1); + const TRectype& rec_umart = cache().get(LF_UMART, key_umart); + const TString4 um = rec_umart.get(UMART_UM); + return um; +} + +//cerca prezzo in: contratto->listino->anamag +real TEdit_rdocs_mask::find_prezzo_articolo(const TString& codart) const +{ + const long codcf = get_long(F_CODCF); + const TDate data_new_doc = get_date(F_DATADOC); + real prezzo = ZERO; + + //0) anagrafica articolo (umart): mal che vada proporrà questa; va vergognosamente messa all'inizio e non alla fine.. + //..perchè serve unità di misura un pò dappertutto + TToken_string key_umart; + key_umart.add(codart); + key_umart.add(1); + const TRectype& rec_umart = cache().get(LF_UMART, key_umart); + const TString4 um = rec_umart.get(UMART_UM); + const real umart_prezzo = rec_umart.get_real(UMART_PREZZO); + + + //1) contratto + //CONTRATTI: tipo=C|catven=|tipocf=C|codcf=codcf|cod=codcontr|tiporiga=A|codriga=codart|um=um + TString query_contr; + query_contr << "USE CONDV"; + query_contr << "\nFROM TIPO=C TIPOCF=C CODCF=#CODCF"; + query_contr << "\nTO TIPO=C TIPOCF=C CODCF=#CODCF"; + + TISAM_recordset recset_contr(query_contr); + recset_contr.set_var("#CODCF", codcf); + const long recset_contr_items = recset_contr.items(); + //deve cercare un contratto in essere per la data del documento (in teoria ce ne dovrebbe essere 1 solo, oppure nessuno) + for (bool ok = recset_contr.move_first(); ok; ok = recset_contr.move_next()) + { + const TDate dataini_c = recset_contr.get(CONDV_VALIN).as_date(); + TDate datafin_c = recset_contr.get(CONDV_VALFIN).as_date(); + if (!datafin_c.ok()) + datafin_c = data_new_doc; + if (dataini_c <= data_new_doc && datafin_c >= data_new_doc) + { + TString4 codcontr = recset_contr.get(CONDV_COD).as_string(); + + //per um è necessario se il contratto scelto ha la gestione delle um accesa (tanto per complicarsi la vita) + const bool gestum_contr = recset_contr.get(CONDV_GESTUM).as_string() == "X"; + + TToken_string key_contr; + key_contr.add("C"); + key_contr.add(""); + key_contr.add("C"); + key_contr.add(codcf); + key_contr.add("A"); + key_contr.add(codart); + if (gestum_contr) + key_contr.add(um); + + const TRectype& rec_contratto = cache().get(LF_RCONDV, key_contr); + const real contratto_prezzo = rec_contratto.get_real(RCONDV_PREZZO); + if (!contratto_prezzo.is_zero()) + { + prezzo = contratto_prezzo; + break; + } + } //if (dataini_c <= data_new_doc... + } //for (bool ok = recset_contr.move_first()... + + //se non ha trovato il prezzo sul contratto -> passa ai listini + + //2) listino + //LISTINI: tipo=L|catven=catven|tipocf=|codcf=|cod=codlis|tiporiga=A|codriga=codart|um=um + if (prezzo.is_zero()) + { + TString query_list; + query_list << "USE CONDV"; + query_list << "\nFROM TIPO=L"; + query_list << "\nTO TIPO=L"; + + TISAM_recordset recset_list(query_list); + const long recset_list_items = recset_list.items(); + for (bool ok = recset_list.move_first(); ok; ok = recset_list.move_next()) + { + const TDate dataini_l = recset_list.get(CONDV_VALIN).as_date(); + TDate datafin_l = recset_list.get(CONDV_VALFIN).as_date(); + if (!datafin_l.ok()) + datafin_l = data_new_doc; + if (dataini_l <= data_new_doc && datafin_l >= data_new_doc) + { + TString4 codlist = recset_list.get(CONDV_COD).as_string(); + + const bool gestum_list = recset_list.get(CONDV_GESTUM).as_string() == "X"; + + TToken_string key_list; + key_list.add("L"); + + //la catven se c'è è del cliente + TToken_string key_cfven; + key_cfven.add("C"); + key_cfven.add(codcf); + const TString& catven = cache().get(LF_CFVEN, key_cfven, CFV_CATVEN); + + key_list.add(catven); + key_list.add(""); + key_list.add(""); + key_list.add(codlist); + + key_list.add("A"); + key_list.add(codart); + if (gestum_list) + key_list.add(um); + + const TRectype& rec_listino = cache().get(LF_RCONDV, key_list); + const real listino_prezzo = rec_listino.get_real(RCONDV_PREZZO); + if (!listino_prezzo.is_zero()) + { + prezzo = listino_prezzo; + break; + } + } //if (dataini_l <= data_new_doc... + } //for (bool ok = recset_list.move_first()... + } //if (prezzo.is_zero())... + + //3) umart + if (prezzo.is_zero()) + prezzo = umart_prezzo; //mal che vada sarà il prezzo di umart + + return prezzo; +} + +//riempie lo sheet in base ai parametri di testata +void TEdit_rdocs_mask::fill_sheet() +{ + //recordset con tutti i documenti non evasi nell'anno per il cliente selezionato + TString query; + query << "USE DOC KEY 2"; + query << "\nSELECT (CODNUM=#CODNUM)&&(DOCEVASO!=\"X\")"; + query << "\nFROM TIPOCF=C CODCF=#CODCF PROVV=D ANNO=#ANNO"; + query << "\nTO TIPOCF=C CODCF=#CODCF PROVV=D ANNO=#ANNO"; + + TISAM_recordset recset(query); + + recset.set_var("#CODCF", get_long(F_CODCF)); + recset.set_var("#CODNUM", get(F_CODNUM)); + recset.set_var("#ANNO", get(F_ANNO)); + + const long items = recset.items(); + const TRectype& rec = recset.cursor()->curr(); + + TSheet_field& sf_righe = sfield(F_RIGHE); + sf_righe.destroy(); + + TProgind pi(items, TR("Caricamento documenti in corso..."), true, true); + int k = 0; + + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + { + if (!pi.addstatus(1)) + break; + + //per ogni documento prende le sole righe non evase e le carica sullo sheet + TDocumento doc(rec); + FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) + { + if (!rdoc->is_evasa() && rdoc->is_evadibile()) + { + sf_righe.autoload_line(++k, *rdoc); //aggiunge una riga nuova riempiendola con tutti i campi che hanno FIELD nella maschera + } + } + } + + sf_righe.force_update(); +} + +//salva losheet con eventuali modifiche e nuove righe +void TEdit_rdocs_mask::save_sheet() +{ + const TString& codnum = get(F_CODNUM); + const TString& tipodoc = get(F_TIPODOC); + const TDate datadoc = get_date(F_DATADOC); + const long codcf = get_long(F_CODCF); + + TDoc_cache doc_cache(codnum, tipodoc, datadoc, codcf); + + TSheet_field& sf_righe = sfield(F_RIGHE); + + FOR_EACH_SHEET_ROW(sf_righe, r, row) + { + TToken_string key; + key.add(row->get(_pos_provv)); + key.add(row->get(_pos_anno)); + key.add(row->get(_pos_num)); + key.add(row->get(_pos_ndoc)); + + int nriga = row->get_int(_pos_nrig); + + TDocumento& curr_doc = doc_cache.doc(key); + if (nriga <= 0) + { + const TRiga_documento& rdoc = curr_doc.new_row("01"); //solo righe merce sono aggiungibili + nriga = rdoc.get_int(RDOC_NRIGA); + row->add(curr_doc.get_long(DOC_NDOC), _pos_ndoc); + row->add(nriga, _pos_nrig); + } + + sf_righe.autosave_line(r + 1, curr_doc[nriga]); //salva maggicamente la riga nuova + } + + doc_cache.destroy(); +} + + +/////////////////////////////////////// +// TSkeleton_application +/////////////////////////////////////// +class TEdit_rdocs : public TSkeleton_application +{ +protected: + virtual bool check_autorization() const { return false; } + virtual const char* extra_modules() const { return "ve"; } + virtual void main_loop(); + virtual bool create(); +}; + +void TEdit_rdocs::main_loop() +{ + TEdit_rdocs_mask mask; + mask.run(); +} + +bool TEdit_rdocs::create() +{ + open_files(LF_DOC, LF_RIGHEDOC, 0); + return TSkeleton_application::create(); +} + +int ps1002100 (int argc, char* argv[]) +{ + TEdit_rdocs main_app; + main_app.run(argc, argv, TR("Gestione righe per cliente")); + return true; +} \ No newline at end of file diff --git a/ps/ps1002100a.h b/ps/ps1002100a.h new file mode 100755 index 000000000..7b9088160 --- /dev/null +++ b/ps/ps1002100a.h @@ -0,0 +1,33 @@ + +//campi maschera normale +#define F_CODCF 201 +#define F_RAGSOC 202 +#define F_CODNUM 203 +#define F_DESNUM 204 +#define F_ANNO 205 +#define F_TIPODOC 206 +#define F_DESTIPO 207 +#define F_DATADOC 208 + +#define F_RIGHE 220 + +//campi sheet F_RIGHE +#define S_NDOC 101 +#define S_NRIGA 102 +#define S_CODART 103 +#define S_DESCR 104 +#define S_UM 105 +#define S_QTA 106 +#define S_QTAEVASA 107 +#define S_PREZZO 108 +#define S_CODIVA 109 +#define S_LAV 110 +#define S_COLORE 111 +#define S_DATAPROD 112 +#define S_QTAPROD 113 +#define S_CODNUM 114 +#define S_ANNO 115 +#define S_PROVV 116 + + +#define S_DESIVA 207 \ No newline at end of file diff --git a/ps/ps1002100a.uml b/ps/ps1002100a.uml new file mode 100755 index 000000000..d94ead86b --- /dev/null +++ b/ps/ps1002100a.uml @@ -0,0 +1,336 @@ +#include "ps1002100a.h" + +TOOLBAR "" 0 0 0 2 + +BUTTON DLG_SELECT 2 2 +BEGIN + PROMPT 1 1 "~Carica" + PICTURE TOOL_MULTISEL + GROUP 1 +END + +BUTTON DLG_SAVEREC 2 2 +BEGIN + PROMPT 2 2 "~Salva" + PICTURE TOOL_SAVEREC + GROUP 2 +END + +#include + +ENDPAGE + +PAGE "Produttivita' giornaliera" 0 2 0 0 + +GROUPBOX DLG_NULL 76 7 +BEGIN + PROMPT 0 0 "@bParametri documenti" +END + +NUMBER F_CODCF 6 +BEGIN + PROMPT 1 1 "Cliente " + USE LF_CLIFO + 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_RAGSOC RAGSOC + CHECKTYPE REQUIRED + FLAGS "R" + WARNING "Cliente assente" + GROUP 1 +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 23 1 "" + USE LF_CLIFO KEY 2 + INPUT TIPOCF "C" + INPUT RAGSOC F_RAGSOC + DISPLAY "Ragione Sociale@50" RAGSOC + DISPLAY "Codice" CODCF + DISPLAY "Partita IVA@12" PAIV + DISPLAY "Sospeso" SOSPESO + COPY OUTPUT F_CODCF + CHECKTYPE NORMAL + GROUP 1 +END + +STRING F_CODNUM 4 +BEGIN + PROMPT 1 2 "Numerazione " + USE %NUM + INPUT CODTAB F_CODNUM + DISPLAY "Codice@8" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODNUM CODTAB + OUTPUT F_DESNUM S0 + CHECKTYPE REQUIRED + FLAGS "U" + GROUP 1 +END + +STRING F_DESNUM 50 +BEGIN + PROMPT 23 2 "" + USE %NUM KEY 2 + INPUT S0 F_DESNUM + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice@8" CODTAB + COPY OUTPUT F_CODNUM + CHECKTYPE NORMAL + GROUP 1 +END + +NUMBER F_ANNO 4 +BEGIN + PROMPT 1 3 "Anno " + FLAGS "A" + CHECKTYPE REQUIRED + GROUP 1 +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 4 "Parametri degli eventuali documenti da creare" +END + +STRING F_TIPODOC 4 +BEGIN + PROMPT 1 5 "Tipo doc. " + USE %TIP + INPUT CODTAB F_TIPODOC + DISPLAY "Codice@8" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_TIPODOC CODTAB + OUTPUT F_DESTIPO S0 + CHECKTYPE REQUIRED + FLAGS "UP" + GROUP 1 +END + +STRING F_DESTIPO 50 33 +BEGIN + PROMPT 23 5 "" + USE %TIP KEY 2 + INPUT S0 F_DESTIPO + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice@8" CODTAB + COPY OUTPUT F_TIPODOC + CHECKTYPE NORMAL + GROUP 1 +END + +DATA F_DATADOC +BEGIN + PROMPT 59 5 "Data " + FLAGS "A" +END + +SPREADSHEET F_RIGHE +BEGIN + PROMPT 1 8 "Righe documento" + ITEM "N. doc." + ITEM "N. riga" + ITEM "Codice articolo@20" + ITEM "Descrizione articolo@50" + ITEM "UM" + ITEM "Quantita@15" + ITEM "Qta evasa@13" + ITEM "Prezzo@18" + ITEM "IVA@4" + ITEM "Lav@3" + ITEM "Colore" + ITEM "Data Prod." + ITEM "Qta prod.@15" + ITEM "Num." + ITEM "Anno" + ITEM "P/D" + GROUP 2 +END + +ENDPAGE + +ENDMASK + + +//--------------------------------------------------- +//maschera di riga dello sheet (righe documenti) + +PAGE "Riga" -1 -1 78 14 + +STRING S_CODART 20 +BEGIN + PROMPT 1 1 "Articolo " + USE LF_ANAMAG + INPUT CODART S_CODART + DISPLAY "Codice@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT S_CODART CODART + OUTPUT S_DESCR DESCR + WARNING "Articolo assente" + FLAGS "U" + CHECKTYPE REQUIRED + FIELD CODART +END + +STRING S_DESCR 50 40 +BEGIN + PROMPT 35 1 "" + USE LF_ANAMAG KEY 2 + INPUT DESCR S_DESCR + DISPLAY "Descrizione@50" DESCR + DISPLAY "Codice@20" CODART + COPY OUTPUT S_CODART + CHECKTYPE NORMAL + FIELD DESCR +END + +STRING S_UM 2 +BEGIN + PROMPT 1 2 "U.M. " + USE LF_UMART KEY 2 + JOIN %UMS INTO CODTAB=UM + INPUT CODART S_CODART SELECT + INPUT UM S_UM + DISPLAY "Codice@20" UM + DISPLAY "Descrizione@50" %UMS->S0 + OUTPUT S_UM UM + FLAGS "U" + CHECKTYPE REQUIRED + FIELD UMQTA +END + +NUMBER S_QTA 15 5 +BEGIN + PROMPT 1 3 "Quantita " + FIELD QTA +END + +NUMBER S_QTAEVASA 13 5 +BEGIN + PROMPT 1 4 "Qta evasa " + FIELD QTAEVASA +END + +CURRENCY S_PREZZO +BEGIN + PROMPT 1 5 "Prezzo " + FLAGS "U" + FIELD PREZZO +END + +STRING S_CODIVA 4 +BEGIN + PROMPT 1 6 "Cod. IVA " + USE %IVA + INPUT CODTAB S_CODIVA + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT S_CODIVA CODTAB + OUTPUT S_DESIVA S0 + CHECKTYPE REQUIRED + FIELD CODIVA +END + +STRING S_DESIVA 50 +BEGIN + PROMPT 20 6 "" + USE %IVA KEY 2 + INPUT S0 S_DESIVA + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT S_CODIVA + CHECKTYPE NORMAL +END + +STRING S_LAV 20 +BEGIN + PROMPT 1 7 "Lavoraz. " + FIELD CODCMS +END + +STRING S_COLORE 20 +BEGIN + PROMPT 1 8 "Colore " + FIELD FASCMS +END + +DATA S_DATAPROD +BEGIN + PROMPT 1 9 "Data prod " + FIELD DATACONS +END + +NUMBER S_QTAPROD 13 5 +BEGIN + PROMPT 1 10 "Qta prod " + FIELD QTAGG1 +END + +GROUPBOX DLG_NULL 76 3 +BEGIN + PROMPT 1 11 "@bChiave riga" +END + +STRING S_CODNUM 4 +BEGIN + PROMPT 2 12 "Num. " + FLAGS "D" + FIELD CODNUM +END + +NUMBER S_ANNO 4 +BEGIN + PROMPT 13 12 "Anno " + FLAGS "D" + FIELD ANNO +END + +STRING S_PROVV 1 +BEGIN + PROMPT 24 12 "P " + FLAGS "D" + FIELD PROVV +END + +NUMBER S_NDOC 7 +BEGIN + PROMPT 29 12 "N.doc. " + FLAGS "D" + FIELD NDOC +END + +NUMBER S_NRIGA 3 +BEGIN + PROMPT 46 12 "N.Riga " + FLAGS "D" + FIELD NRIGA +END + +ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 + +BUTTON DLG_OK 2 2 +BEGIN + PROMPT 1 1 "" +END + +BUTTON DLG_DELREC 2 2 +BEGIN + PROMPT 2 1 "" +END + +BUTTON DLG_CANCEL 2 2 +BEGIN + PROMPT 3 1 "" +END + +ENDPAGE + +ENDMASK \ No newline at end of file diff --git a/ps/ps1002_prod_gca.h b/ps/ps1002_prod_gca.h new file mode 100755 index 000000000..7afbb4d18 --- /dev/null +++ b/ps/ps1002_prod_gca.h @@ -0,0 +1,7 @@ + +//campi maschera report ps1002_prod_gca +#define F_CODNUM 201 +#define F_DESNUM 202 +#define F_ANNO 203 +#define F_DADATA 204 +#define F_ADATA 205 diff --git a/ps/ps1002_prod_gca.rep b/ps/ps1002_prod_gca.rep new file mode 100755 index 000000000..2b7e0fc99 --- /dev/null +++ b/ps/ps1002_prod_gca.rep @@ -0,0 +1,98 @@ + + + Produzione giorno-cliente-articolo + +
+ + + + + + + + +
+
+ MESSAGE RESET,F1.104 +MESSAGE RESET,F1.105 + + + +
+
+ DATACONS + + MESSAGE RESET,F2.104 +MESSAGE RESET,F2.105 + + DATACONS + MESSAGE COPY,F2.101 + +
+
+ DOC.TIPOCF+DOC.CODCF + + MESSAGE RESET,F3.104 +MESSAGE RESET,F3.105 + + 33.CODCF + + + MESSAGE ISAMREAD,20,TIPOCF=33.TIPOCF!CODCF=33.CODCF,RAGSOC + +
+
+
+ + CODART + + + + DESCR + + + + PREZZO + + + QTAGG1 + MESSAGE ADD,F3.104 +MESSAGE ADD,F2.104 +MESSAGE ADD,F1.104 + + + #103*#104 + MESSAGE ADD,F3.105 +MESSAGE ADD,F2.105 +MESSAGE ADD,F1.105 + +
+
+
+ + + + + +
+
+ + + + + + +
+
+ + + + +
+ USE RDOC +SELECT (BETWEEN(DATACONS,#DADATA,#ADATA))(33.TIPOCF="C") +BY DATACONS 33.CODCF CODART +JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC +FROM CODNUM=#CODNUM ANNO=#ANNO PROVV=D +TO CODNUM=#CODNUM ANNO=#ANNO PROVV=D + \ No newline at end of file diff --git a/ps/ps1002_prod_gca.uml b/ps/ps1002_prod_gca.uml new file mode 100755 index 000000000..5ffdffe5f --- /dev/null +++ b/ps/ps1002_prod_gca.uml @@ -0,0 +1,60 @@ +#include "ps1002_prod_gca.h" + +PAGE "Produzione giornaliera" -1 -1 78 5 + +STRING F_CODNUM 4 +BEGIN + PROMPT 1 1 "Numerazione " + USE %NUM + INPUT CODTAB F_CODNUM + DISPLAY "Codice@8" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODNUM CODTAB + OUTPUT F_DESNUM S0 + CHECKTYPE REQUIRED + FLAGS "U" + FIELD #CODNUM +END + +STRING F_DESNUM 50 +BEGIN + PROMPT 23 1 "" + USE %NUM KEY 2 + INPUT S0 F_DESNUM + DISPLAY "Descrizione@50" S0 + DISPLAY "Codice@8" CODTAB + COPY OUTPUT F_CODNUM + CHECKTYPE NORMAL +END + +NUMBER F_ANNO 4 +BEGIN + PROMPT 1 2 "Anno " + FLAGS "A" + CHECKTYPE REQUIRED + FIELD #ANNO +END + +DATA F_DADATA +BEGIN + PROMPT 1 3 "Dalla data " + FLAGS "A" + CHECKTYPE REQUIRED + FIELD DADATA +END + +DATA F_ADATA +BEGIN + PROMPT 30 3 "Alla data " + FLAGS "A" + CHECKTYPE REQUIRED + FIELD ADATA +END + +ENDPAGE + +TOOLBAR "" 0 0 0 2 +#include +ENDPAGE + +ENDMASK \ No newline at end of file diff --git a/sc/sc0200b.h b/sc/sc0200b.h new file mode 100755 index 000000000..9c0cb8cbd --- /dev/null +++ b/sc/sc0200b.h @@ -0,0 +1,5 @@ +#include "sc0100a.h" + +#define F_TUTTE 201 +#define F_CODVAL 202 +#define F_PARTITE 203 diff --git a/sc/sc0200b.uml b/sc/sc0200b.uml new file mode 100755 index 000000000..9326ab3b5 --- /dev/null +++ b/sc/sc0200b.uml @@ -0,0 +1,155 @@ +#include "sc0200b.h" + +TOOLBAR "" 0 0 0 2 + +BUTTON DLG_EDIT 2 2 +BEGIN + PROMPT 1 1 "Modifica" + PICTURE TOOL_EDIT +END + +BUTTON DLG_NEWREC 2 2 +BEGIN + PROMPT 2 1 "Nuovo" + PICTURE TOOL_NEWREC +END + +#include + +ENDPAGE + +PAGE "Gestione partite" 0 0 0 0 + +LIST F_TIPO 1 10 +BEGIN + PROMPT 1 0 "Tipo conto " + ITEM "|Conto" + MESSAGE SHOW,1@|HIDE,2@|HIDE,3@ + ITEM "C|Cliente" + MESSAGE HIDE,1@|SHOW,2@|HIDE,3@ + ITEM "F|Fornitore" + MESSAGE HIDE,1@|HIDE,2@|SHOW,3@ + FLAGS "DG" +END + +NUMBER F_GRUPPO 3 +BEGIN + PROMPT 27 0 "Gruppo " + FLAGS "D" +END + +NUMBER F_CONTO 3 +BEGIN + PROMPT 41 0 "Conto " + FLAGS "D" +END + +NUMBER F_SOTTOCONTO 6 +BEGIN + PROMPT 54 0 "Sottoconto " + USE LF_PCON SELECT SOTTOCONTO!="" + INPUT GRUPPO F_GRUPPO + INPUT CONTO F_CONTO + INPUT SOTTOCONTO F_SOTTOCONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPO GRUPPO + OUTPUT F_CONTO CONTO + OUTPUT F_SOTTOCONTO SOTTOCONTO + OUTPUT F_DESCR DESCR + GROUP 1 + CHECKTYPE REQUIRED + FLAGS "D" +END + +NUMBER F_CLIENTE 6 +BEGIN + PROMPT 54 0 "Cliente " + USE LF_CLIFO + INPUT TIPOCF "C" + INPUT CODCF F_CLIENTE + DISPLAY "Cliente" CODCF + DISPLAY "Descrizione@50" RAGSOC + OUTPUT F_CLIENTE CODCF + OUTPUT F_DESCRCLI RAGSOC + ADD RUN cg0 -1 C + GROUP 2 + CHECKTYPE REQUIRED + FLAGS "D" +END + +NUMBER F_FORNITORE 6 +BEGIN + PROMPT 54 0 "Fornitore " + USE LF_CLIFO + INPUT TIPOCF "F" + INPUT CODCF F_FORNITORE + DISPLAY "Fornitore" CODCF + DISPLAY "Descrizione@50" RAGSOC + OUTPUT F_FORNITORE CODCF + OUTPUT F_DESCRFOR RAGSOC + ADD RUN cg0 -1 F + GROUP 3 + CHECKTYPE REQUIRED + FLAGS "D" +END + +STRING F_DESCR 50 58 +BEGIN + PROMPT 1 1 "Descrizione " + GROUP 1 + FLAGS "D" +END + +STRING F_DESCRCLI 50 58 +BEGIN + PROMPT 1 1 "Descrizione " + GROUP 2 + FLAGS "D" +END + +STRING F_DESCRFOR 50 58 +BEGIN + PROMPT 1 1 "Descrizione " + GROUP 3 + FLAGS "D" +END + +RADIOBUTTON F_TUTTE 1 38 +BEGIN + PROMPT 1 2 "Mostra partite" + ITEM "1|Aperte" + ITEM "2|Chiuse" + ITEM "3|Tutte" + FLAGS "Z" +END + +STRING F_CODVAL 4 +BEGIN + PROMPT 60 3 "Valuta " + USE %VAL + INPUT CODTAB F_CODVAL + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_CODVAL CODTAB + CHECKTYPE NORMAL +END + +TLIST F_PARTITE -3 -1 +BEGIN + PROMPT 0 5 "" + DISPLAY "Partita@35" DESCR + DISPLAY "Docum.@8" NUMDOC + DISPLAY "Data@10R" DATADOC + DISPLAY "Dare@15R" DARE + DISPLAY "Avere@15R" AVERE + DISPLAY "Abbuoni@15R" ABBUONI + DISPLAY "Diff. Cambio@15R" DIFFCAM + DISPLAY "Ritenute fiscali@15R" RITENUTE + DISPLAY "Ritenute sociali@15R" RITSOC + DISPLAY "P.N." NREG +END + +ENDMASK