c3d63f12b2
git-svn-id: svn://10.65.10.50/branches/R_10_00@23073 c028cbd2-c16b-5b4b-a496-9718f37d4682
187 lines
5.1 KiB
C++
187 lines
5.1 KiB
C++
#include <applicat.h>
|
|
|
|
#include "../ve/velib04.h"
|
|
#include "ci1.h"
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Applicazione
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TMovimenti_interni_app : public TSkeleton_application
|
|
{
|
|
TFilename _trans;
|
|
|
|
protected:
|
|
TDoc_key find_correlated(const TDocumento& din) const;
|
|
void delete_doc(TDocumento& doc) const;
|
|
|
|
public:
|
|
virtual bool create();
|
|
virtual void main_loop();
|
|
};
|
|
|
|
TDoc_key TMovimenti_interni_app::find_correlated(const TDocumento& din) const
|
|
{
|
|
TDoc_key dk;
|
|
|
|
TString query, filter;
|
|
filter << ' ' << RDOC_DAPROVV << '=' << din.get(DOC_PROVV)
|
|
<< ' ' << RDOC_DAANNO << '=' << din.get(DOC_ANNO)
|
|
<< ' ' << RDOC_DACODNUM << '=' << din.get(DOC_CODNUM)
|
|
<< ' ' << RDOC_DANDOC << '=' << din.get(DOC_NDOC);
|
|
query << "USE 34 KEY 4" << "\nFROM " << filter << "\nTO " << filter;
|
|
TISAM_recordset rset(query);
|
|
if (rset.move_first())
|
|
{
|
|
const char provv = rset.get(RDOC_PROVV).as_string()[0];
|
|
const int anno = rset.get(RDOC_ANNO).as_int();
|
|
const TString4 codnum = rset.get(RDOC_CODNUM).as_string();
|
|
const long ndoc = rset.get(RDOC_NDOC).as_int();
|
|
dk = TDoc_key(anno, codnum, ndoc, provv);
|
|
}
|
|
|
|
return dk;
|
|
}
|
|
|
|
void TMovimenti_interni_app::delete_doc(TDocumento& doc) const
|
|
{
|
|
doc.remove();
|
|
}
|
|
|
|
bool TMovimenti_interni_app::create()
|
|
{
|
|
const TFixed_string a2 = argc() >= 2 ? argv(2) : "";
|
|
if (a2.starts_with("-i", true) || a2.starts_with("/i", true))
|
|
_trans = a2.mid(2);
|
|
|
|
#ifdef DBG
|
|
if (_trans.blank())
|
|
{
|
|
const TDate oggi(TODAY);
|
|
_trans.tempdir();
|
|
_trans.add(name());
|
|
_trans.ext("ini");
|
|
TConfig ini(_trans, "Transaction");
|
|
ini.set("DataElab", oggi.string());
|
|
ini.set("ProvvOut", "D");
|
|
ini.set("AnnoOut", 2014);
|
|
ini.set("CodNumOut", "TRAS");
|
|
ini.set("NDocOut", "");
|
|
|
|
ini.set_paragraph("33");
|
|
ini.set(DOC_PROVV, "D");
|
|
ini.set(DOC_ANNO, 2014);
|
|
ini.set(DOC_CODNUM, "TRAS");
|
|
ini.set(DOC_NDOC, 1);
|
|
}
|
|
#endif
|
|
|
|
if (!_trans.exist())
|
|
return cantread_box(_trans);
|
|
|
|
open_files(LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_ANAMAG, LF_CODCORR, 0);
|
|
return TSkeleton_application::create();
|
|
}
|
|
|
|
void TMovimenti_interni_app::main_loop()
|
|
{
|
|
TConfig ini(_trans, "Transaction");
|
|
const TString8 codelab = ini.get("Action");
|
|
const TDate oggi = ini.get("DataElab");
|
|
ini.set_paragraph("33");
|
|
const char provv = ini.get_char(DOC_PROVV);
|
|
const int anno = ini.get_int(DOC_ANNO);
|
|
const TString& codnum = ini.get(DOC_CODNUM);
|
|
const long ndoc = ini.get_long(DOC_NDOC);
|
|
|
|
TElaborazione_esterna mi(codelab);
|
|
const TString4 tipo_correlato = mi.tipo_finale();
|
|
|
|
TDocumento din(provv, anno, codnum, ndoc);
|
|
|
|
TDoc_key kout = find_correlated(din);
|
|
const bool is_new = kout.empty_items();
|
|
if (is_new)
|
|
kout = TDoc_key(anno, codnum, 0, provv);
|
|
|
|
TDocumento dout(kout.provv(), kout.anno(), kout.codnum(), kout.ndoc());
|
|
|
|
if (ini.get(DOC_NOTE) == "DELETING")
|
|
{
|
|
delete_doc(dout);
|
|
ini.set("Result", "SUCCESS");
|
|
return;
|
|
}
|
|
|
|
dout.copy_contents(din, true);
|
|
|
|
dout.put(DOC_TIPODOC, tipo_correlato);
|
|
dout.put(DOC_CODCMS, din.get(DOC_COMMPREL));
|
|
dout.put(DOC_FASCMS, din.get(DOC_FASEPREL));
|
|
dout.put(DOC_COMMPREL, din.get(DOC_CODCMS));
|
|
dout.put(DOC_FASEPREL, din.get(DOC_FASCMS));
|
|
|
|
const TString16 qtafld = din.tipo().field_qta();
|
|
FOR_EACH_PHYSICAL_RDOC(dout, r, rdoc)
|
|
{
|
|
const real qta = rdoc->get_real(qtafld);
|
|
if (!qta.is_zero())
|
|
rdoc->put(qtafld, -qta);
|
|
rdoc->put(RDOC_CODCMS, dout.get(DOC_CODCMS));
|
|
rdoc->put(RDOC_FASCMS, dout.get(DOC_FASCMS));
|
|
}
|
|
|
|
ini.set_paragraph("Transaction");
|
|
if (dout.write(!is_new) == NOERR)
|
|
{
|
|
ini.set("Result", "OUTDOC");
|
|
ini.set("NDocOut", dout.get(DOC_NDOC));
|
|
ini.set(DOC_STATO, mi.stato_finale_doc_iniziale(), "33");
|
|
}
|
|
else
|
|
{
|
|
ini.set("Result", "ERROR");
|
|
}
|
|
|
|
if (ca_config().get_int("Authorizations") > 0)
|
|
{
|
|
TString8 codelab;
|
|
TString query;
|
|
query << "USE %ELD SELECT I0=7";
|
|
TISAM_recordset eld(query);
|
|
for (bool ok = eld.move_first(); ok; ok = eld.move_next())
|
|
{
|
|
const TString8 cod = eld.get("CODTAB").as_string();
|
|
if (codelab.blank())
|
|
codelab = cod;
|
|
TContabilizzazione_analitica ca(cod);
|
|
if (ca.is_document_ok(dout))
|
|
{
|
|
codelab = cod;
|
|
break;
|
|
}
|
|
}
|
|
TContabilizzazione_analitica ca(codelab);
|
|
TLista_documenti lista_in, lista_out;
|
|
lista_in.add(din);
|
|
lista_in.add(dout);
|
|
if (ca.elabora(lista_in, lista_out, oggi, false))
|
|
{
|
|
// Forza stato corretto a documento principale
|
|
din.put(DOC_STATO, mi.stato_finale_doc_iniziale());
|
|
din.rewrite();
|
|
|
|
// Forza stato bloccato a documento correlato
|
|
dout.put(DOC_STATO, mi.stato_finale());
|
|
dout.rewrite();
|
|
}
|
|
}
|
|
}
|
|
|
|
int ci1500(int argc, char* argv[])
|
|
{
|
|
TMovimenti_interni_app mi;
|
|
mi.run(argc, argv, TR("Movimenti interni"));
|
|
return 0;
|
|
}
|