Files correlati : Ricompilazione Demo : [ ] Commento : Rportata la versione 3.2 patch 1314 git-svn-id: svn://10.65.10.50/trunk@18269 c028cbd2-c16b-5b4b-a496-9718f37d4682
226 lines
6.3 KiB
C++
Executable File
226 lines
6.3 KiB
C++
Executable File
#include <config.h>
|
|
|
|
#include "../ve/velib.h"
|
|
|
|
#include "colib.h"
|
|
#include "socicoop.h"
|
|
#include "mercaticoop.h"
|
|
|
|
static bool add_socio(const TRelation& rel, void* pJolly)
|
|
{
|
|
TString_array& a = *(TString_array*)pJolly;
|
|
TString16 key, last_key;
|
|
|
|
const TRectype& rec = rel.curr();
|
|
key.format("%6d", rec.get_int(SC_CODCF));
|
|
|
|
const int last = a.items()-1;
|
|
if (last >= 0)
|
|
last_key = a.row(last);
|
|
|
|
if (key != last_key)
|
|
a.add(key);
|
|
|
|
return true;
|
|
}
|
|
|
|
static real get_perc_socio(const long codsocio, const TString& codcomp)
|
|
{
|
|
real perc = ZERO;
|
|
const TRectype& socio = cache().get(LF_SOCICOOP, codsocio);
|
|
if (socio.get(SC_COMPAGNIA1) == codcomp)
|
|
perc = socio.get_real(SC_QUOTA1);
|
|
else
|
|
if (socio.get(SC_COMPAGNIA2) == codcomp)
|
|
perc = socio.get_real(SC_QUOTA2);
|
|
else
|
|
if (socio.get(SC_COMPAGNIA3) == codcomp)
|
|
perc = socio.get_real(SC_QUOTA3);
|
|
return perc;
|
|
}
|
|
|
|
// funzione che restituisce il codice spesa data il nome della spesa in configurazione
|
|
static const TString& cod_spesa(const char* spesa)
|
|
{
|
|
static TAssoc_array _spese;
|
|
static long _ditta = 0;
|
|
if (prefix().get_codditta() != _ditta)
|
|
{
|
|
TConfig d(CONFIG_DITTA, "co");
|
|
_spese = d.list_variables();
|
|
_ditta = prefix().get_codditta();
|
|
}
|
|
TString* cod = (TString*) _spese.objptr(spesa);
|
|
if (cod != NULL)
|
|
return *cod;
|
|
return EMPTY_STRING;
|
|
}
|
|
|
|
// aggiorna le spese sul documento
|
|
void update_spese_doc(const long codmercato, TDocumento& doc)
|
|
{
|
|
TAssoc_array spese_doc;
|
|
const TRectype& mercato = cache().get(LF_MERCATICOOP, codmercato);
|
|
spese_doc.add(cod_spesa("SpesaRitAcc")); // spesa ritenuta accantonamento
|
|
real perc = mercato.get_real(MC_DIRITTI1);
|
|
if (!perc.is_zero())
|
|
spese_doc.add(cod_spesa("SpesaDiritti1")); // spesa diritti di mercato 1
|
|
perc = mercato.get_real(MC_DIRITTI2);
|
|
if (!perc.is_zero())
|
|
spese_doc.add(cod_spesa("SpesaDiritti2")); // spesa diritti di mercato 2
|
|
real spesa = mercato.get_real(MC_SPESEFACC);
|
|
if (!spesa.is_zero())
|
|
spese_doc.add(cod_spesa("SpesaFacc")); // spesa facchinaggio
|
|
spesa = mercato.get_real(MC_SPESECASSE);
|
|
if (!spesa.is_zero())
|
|
spese_doc.add(cod_spesa("SpesaCasse")); // spesa casse
|
|
// chiamo la funzione che aggiunge in automatico le spese
|
|
TString_array array_spese;
|
|
spese_doc.get_keys(array_spese);
|
|
doc.zero(DOC_SPESEUPD);
|
|
doc.update_spese_aut(array_spese);
|
|
|
|
// devo ora sistemare le % e qta/prezzo sulle spese
|
|
real totqta = ZERO;
|
|
real totcasse = ZERO;
|
|
int i;
|
|
for (i = 1; i <= doc.rows(); i++)
|
|
{
|
|
const TRiga_documento& riga_doc = doc[i];
|
|
if (riga_doc.is_merce())
|
|
{
|
|
totqta+=riga_doc.quantita();
|
|
totcasse+=riga_doc.get_long(DOC_NCOLLI);
|
|
}
|
|
}
|
|
for (i = 1; i <= doc.rows(); i++)
|
|
{
|
|
TRiga_documento& riga_doc = doc[i];
|
|
if (riga_doc.is_spese())
|
|
{
|
|
const char* codspesa = riga_doc.get(RDOC_CODART);
|
|
if (spese_doc.is_key(codspesa))
|
|
{
|
|
const TString& spesadiritti1 = cod_spesa("SpesaDiritti1");
|
|
if (spesadiritti1 == codspesa) // sistemo la qta/valore/codice iva
|
|
{
|
|
real perc = mercato.get_real(MC_DIRITTI1);
|
|
if (!perc.is_zero())
|
|
{
|
|
riga_doc.put(RDOC_QTA, perc);
|
|
riga_doc.put(RDOC_CODIVA, mercato.get(MC_CODIVA1));
|
|
}
|
|
}
|
|
const TString& spesadiritti2 = cod_spesa("SpesaDiritti2");
|
|
if (spesadiritti2 == codspesa) // sistemo la qta/valore/codice iva
|
|
{
|
|
real perc = mercato.get_real(MC_DIRITTI2);
|
|
if (!perc.is_zero())
|
|
{
|
|
riga_doc.put(RDOC_QTA, perc);
|
|
riga_doc.put(RDOC_CODIVA, mercato.get(MC_CODIVA2));
|
|
}
|
|
}
|
|
const TString& spesafacc = cod_spesa("SpesaFacc");
|
|
if (spesafacc == codspesa) // sistemo la qta/valore/codice iva
|
|
{
|
|
riga_doc.put(RDOC_QTA, totqta);
|
|
riga_doc.put(RDOC_PREZZO, mercato.get(MC_SPESEFACC));
|
|
riga_doc.put(RDOC_CODIVA, mercato.get(MC_CODIVAFACC));
|
|
}
|
|
const TString& spesacasse = cod_spesa("SpesaCasse");
|
|
if (spesacasse == codspesa) // sistemo la qta/valore/codice iva
|
|
{
|
|
riga_doc.put(RDOC_QTA, totcasse);
|
|
riga_doc.put(RDOC_PREZZO, mercato.get(MC_SPESECASSE));
|
|
riga_doc.put(RDOC_CODIVA, mercato.get(MC_CODIVACASS));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// crea una lista documenti a partire da un conferimento per compagnia
|
|
int compagnia2soci(const TDocumento& doc_orig, const TString& codcomp, const long codmercato, const long nfasta, TLista_documenti& listadoc)
|
|
{
|
|
TString_array listasoci;
|
|
TRelation relsoci(LF_SOCICOOP);
|
|
TString filtro = "(COMPAGNIA1=\"";
|
|
filtro << codcomp;
|
|
filtro << "\") || (COMPAGNIA2=\"";
|
|
filtro << codcomp;
|
|
filtro << "\") || (COMPAGNIA3=\"";
|
|
filtro << codcomp;
|
|
filtro << "\")";
|
|
TCursor cursoci(&relsoci, filtro);
|
|
cursoci.scan(add_socio, &listasoci);
|
|
FOR_EACH_ARRAY_ROW(listasoci, r, row)
|
|
{
|
|
long codsocio = row->get_long();
|
|
TDocumento docnew(doc_orig);
|
|
docnew.put(DOC_CODCF, codsocio);
|
|
docnew.put(DOC_TIPOCF, "F");
|
|
docnew.put("MERCATO", codmercato);
|
|
docnew.put("NFASTA", nfasta);
|
|
listadoc.add(docnew);
|
|
}
|
|
for (int i = 1; i <= doc_orig.rows(); i++)
|
|
{
|
|
const TRiga_documento& riga_doc = doc_orig[i];
|
|
if (riga_doc.is_merce())
|
|
{
|
|
const char avalore = riga_doc.get_char(RDOC_CODAGG1);
|
|
if (avalore == 'X')
|
|
{
|
|
TGeneric_distrib prezzo_dist(riga_doc.prezzo(false, false), 2);
|
|
for (int j = 0; j < listadoc.items(); j++)
|
|
{
|
|
long codsocio = listadoc[j].codcf();
|
|
real perc = get_perc_socio(codsocio, codcomp);
|
|
prezzo_dist.add(perc);
|
|
}
|
|
for (int k = 0; k < listadoc.items(); k++)
|
|
{
|
|
real prezzosocio = prezzo_dist.get();
|
|
listadoc[k][i].put(RDOC_PREZZO, prezzosocio);
|
|
}
|
|
}
|
|
|
|
TGeneric_distrib qta_dist(riga_doc.quantita(), 5);
|
|
int j;
|
|
|
|
for (j = 0; j < listadoc.items(); j++)
|
|
{
|
|
long codsocio = listadoc[j].codcf();
|
|
real perc = get_perc_socio(codsocio, codcomp);
|
|
qta_dist.add(perc);
|
|
}
|
|
for (j = 0; j < listadoc.items(); j++)
|
|
{
|
|
real qtasocio = qta_dist.get();
|
|
listadoc[j][i].put(RDOC_QTA, qtasocio);
|
|
}
|
|
TGeneric_distrib qtagg_dist(riga_doc.get_real(RDOC_QTAGG1), 5);
|
|
|
|
for (j = 0; j < listadoc.items(); j++)
|
|
{
|
|
long codsocio = listadoc[j].codcf();
|
|
real perc = get_perc_socio(codsocio, codcomp);
|
|
qtagg_dist.add(perc);
|
|
}
|
|
for (j = 0; j < listadoc.items(); j++)
|
|
{
|
|
real qtasocio = qtagg_dist.get();
|
|
listadoc[j][i].put(RDOC_QTAGG1, qtasocio);
|
|
}
|
|
}
|
|
}
|
|
for (int i = 0; i < listadoc.items(); i++)
|
|
{
|
|
listadoc[i].put(DOC_RAGGR, true);
|
|
update_spese_doc(codmercato, listadoc[i]);
|
|
}
|
|
return listadoc.items();
|
|
}
|
|
|