Patch level : 2.1 nopatch
Files correlati : Ricompilazione Demo : [ ] Commento : Personalizzazione CRPA git-svn-id: svn://10.65.10.50/trunk@12246 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
a2eabd022e
commit
137797e17c
164
crpa/crpa.cpp
Executable file
164
crpa/crpa.cpp
Executable file
@ -0,0 +1,164 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#define WINDOWS_EXTRA_LEAN
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#pragma warning(disable : 4786)
|
||||||
|
#define WIN32COMMON
|
||||||
|
#include <occi.h>
|
||||||
|
|
||||||
|
using namespace oracle::occi;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class campo2pmc
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
Environment* env;
|
||||||
|
Connection* conn;
|
||||||
|
|
||||||
|
public:
|
||||||
|
int executeCommand(const char* command);
|
||||||
|
int readCommands(const char* filename);
|
||||||
|
void writeResult(const char* resultfile, int error);
|
||||||
|
void writeLog(const char* message);
|
||||||
|
bool getIniParam(const char* name, string& value);
|
||||||
|
|
||||||
|
campo2pmc();
|
||||||
|
~campo2pmc();
|
||||||
|
};
|
||||||
|
|
||||||
|
campo2pmc::campo2pmc(): env(NULL), conn(NULL)
|
||||||
|
{
|
||||||
|
string username, password, connect;
|
||||||
|
getIniParam("Username", username);
|
||||||
|
getIniParam("Password", password);
|
||||||
|
getIniParam("Connect", connect);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
env = Environment::createEnvironment(Environment::DEFAULT);
|
||||||
|
conn = env->createConnection(username, password, connect);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
conn = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
campo2pmc::~campo2pmc()
|
||||||
|
{
|
||||||
|
if (conn != NULL)
|
||||||
|
env->terminateConnection(conn);
|
||||||
|
Environment::terminateEnvironment(env);
|
||||||
|
}
|
||||||
|
|
||||||
|
void campo2pmc::writeLog(const char* message)
|
||||||
|
{
|
||||||
|
ofstream logfile("crpa.log", ios::app);
|
||||||
|
|
||||||
|
char date[128];
|
||||||
|
char time[128];
|
||||||
|
_strtime(time);
|
||||||
|
_strdate(date);
|
||||||
|
logfile << date << ' ' << time << ' ' << message << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void campo2pmc::writeResult(const char* resultfile, int error)
|
||||||
|
{
|
||||||
|
char stringerr[16];
|
||||||
|
sprintf(stringerr, "%d", error);
|
||||||
|
::WritePrivateProfileString("Transaction", "Error", stringerr, resultfile);
|
||||||
|
::WritePrivateProfileString("Transaction", "Result", error ? "ERROR": "OK", resultfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool campo2pmc::getIniParam(const char* name, string& value)
|
||||||
|
{
|
||||||
|
char val[256];
|
||||||
|
bool ok = ::GetPrivateProfileString("Oracle", name, "", val,
|
||||||
|
sizeof(val), "./crpa.ini") != 0;
|
||||||
|
if (ok) value = val;
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int campo2pmc::executeCommand(const char* command)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
if (conn != NULL)
|
||||||
|
{
|
||||||
|
Statement* stmt = conn->createStatement(command);
|
||||||
|
if (stmt != NULL)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
stmt->executeUpdate();
|
||||||
|
}
|
||||||
|
catch(SQLException ex)
|
||||||
|
{
|
||||||
|
err = ex.getErrorCode();
|
||||||
|
OCCI_STD_NAMESPACE::string mess = ex.getMessage();
|
||||||
|
char message[1024];
|
||||||
|
sprintf(message, "Errore %d: %s nel comando %s", err, mess.c_str(), command);
|
||||||
|
writeLog(message);
|
||||||
|
}
|
||||||
|
conn->terminateStatement(stmt);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char message[1024];
|
||||||
|
sprintf(message, "Statement non valido: %s", command);
|
||||||
|
writeLog(message);
|
||||||
|
err = -2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
writeLog("Connessione non valida");
|
||||||
|
err = -1;
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int campo2pmc::readCommands(const char* filename)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
ifstream fin(filename);
|
||||||
|
while ((!fin.eof()) && (err==0))
|
||||||
|
{
|
||||||
|
char line[4096];
|
||||||
|
fin.getline(line, sizeof(line), 'æ');
|
||||||
|
if (!fin.eof())
|
||||||
|
{
|
||||||
|
strcat(line,"\n");
|
||||||
|
err = executeCommand(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (err != 0)
|
||||||
|
conn->rollback();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wake_up_caller()
|
||||||
|
{
|
||||||
|
const unsigned int WM_WAKEUP = RegisterWindowMessage("WAKEUP");
|
||||||
|
const HANDLE ht = 0; // GetCurrentProcess();
|
||||||
|
PostMessage(HWND_BROADCAST, WM_WAKEUP, (WPARAM)ht, 0L);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
const char* commandfile = "crpa.sql";
|
||||||
|
const char* resultfile = "./crpasql.ini";
|
||||||
|
if (argc > 1)
|
||||||
|
commandfile = argv[1];
|
||||||
|
if (argc > 2)
|
||||||
|
resultfile = argv[2];
|
||||||
|
campo2pmc passa;
|
||||||
|
int err = passa.readCommands(commandfile);
|
||||||
|
passa.writeResult(resultfile, err);
|
||||||
|
wake_up_caller();
|
||||||
|
return err;
|
||||||
|
}
|
103
crpa/crpa.dsp
Executable file
103
crpa/crpa.dsp
Executable file
@ -0,0 +1,103 @@
|
|||||||
|
# Microsoft Developer Studio Project File - Name="crpa" - Package Owner=<4>
|
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||||
|
# ** DO NOT EDIT **
|
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||||
|
|
||||||
|
CFG=crpa - Win32 Debug
|
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||||
|
!MESSAGE use the Export Makefile command and run
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "crpa.mak".
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE You can specify a configuration when running NMAKE
|
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE NMAKE /f "crpa.mak" CFG="crpa - Win32 Debug"
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE Possible choices for configuration are:
|
||||||
|
!MESSAGE
|
||||||
|
!MESSAGE "crpa - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE "crpa - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||||
|
!MESSAGE
|
||||||
|
|
||||||
|
# Begin Project
|
||||||
|
# PROP AllowPerConfigDependencies 0
|
||||||
|
# PROP Scc_ProjName ""
|
||||||
|
# PROP Scc_LocalPath ""
|
||||||
|
CPP=cl.exe
|
||||||
|
RSC=rc.exe
|
||||||
|
|
||||||
|
!IF "$(CFG)" == "crpa - Win32 Release"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 0
|
||||||
|
# PROP BASE Output_Dir "Release"
|
||||||
|
# PROP BASE Intermediate_Dir "Release"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 0
|
||||||
|
# PROP Output_Dir "Release"
|
||||||
|
# PROP Intermediate_Dir "Release"
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||||
|
# ADD CPP /nologo /W3 /GX /O2 /I "c:\oracle\ora90\oci\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
|
||||||
|
# SUBTRACT CPP /YX /Yc /Yu
|
||||||
|
# ADD BASE RSC /l 0x410 /d "NDEBUG"
|
||||||
|
# ADD RSC /l 0x410 /d "NDEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "crpa - Win32 Debug"
|
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0
|
||||||
|
# PROP BASE Use_Debug_Libraries 1
|
||||||
|
# PROP BASE Output_Dir "Debug"
|
||||||
|
# PROP BASE Intermediate_Dir "Debug"
|
||||||
|
# PROP BASE Target_Dir ""
|
||||||
|
# PROP Use_MFC 0
|
||||||
|
# PROP Use_Debug_Libraries 1
|
||||||
|
# PROP Output_Dir "Debug"
|
||||||
|
# PROP Intermediate_Dir "Debug"
|
||||||
|
# PROP Ignore_Export_Lib 0
|
||||||
|
# PROP Target_Dir ""
|
||||||
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "c:\oracle\ora90\oci\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c
|
||||||
|
# SUBTRACT CPP /X /YX /Yc /Yu
|
||||||
|
# ADD BASE RSC /l 0x410 /d "_DEBUG"
|
||||||
|
# ADD RSC /l 0x410 /d "_DEBUG"
|
||||||
|
BSC32=bscmake.exe
|
||||||
|
# ADD BASE BSC32 /nologo
|
||||||
|
# ADD BSC32 /nologo
|
||||||
|
LINK32=link.exe
|
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib c:\oracle\ora90\oci\lib\msvc\oraocci9.lib /nologo /subsystem:console /debug /machine:I386 /out:"d:\u\cris\v17.aga\exe\crpa.exe" /pdbtype:sept
|
||||||
|
|
||||||
|
!ENDIF
|
||||||
|
|
||||||
|
# Begin Target
|
||||||
|
|
||||||
|
# Name "crpa - Win32 Release"
|
||||||
|
# Name "crpa - Win32 Debug"
|
||||||
|
# Begin Group "Source Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\Crpa.cpp
|
||||||
|
# End Source File
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||||
|
# End Group
|
||||||
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||||
|
# End Group
|
||||||
|
# End Target
|
||||||
|
# End Project
|
29
crpa/crpa.dsw
Executable file
29
crpa/crpa.dsw
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||||
|
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Project: "crpa"=.\crpa.dsp - Package Owner=<4>
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<4>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
Global:
|
||||||
|
|
||||||
|
Package=<5>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
Package=<3>
|
||||||
|
{{{
|
||||||
|
}}}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
103
crpa/crpa.ini
Executable file
103
crpa/crpa.ini
Executable file
@ -0,0 +1,103 @@
|
|||||||
|
[Oracle]
|
||||||
|
Username=pmc
|
||||||
|
Password=pmc
|
||||||
|
Connect=zen1
|
||||||
|
Run=
|
||||||
|
|
||||||
|
[23]
|
||||||
|
TABLE=AGA_PRJDOC_T146_P
|
||||||
|
UNICO=
|
||||||
|
ARCH=!_FIRM,_MOV
|
||||||
|
UNICARCH=!_UNICMOV
|
||||||
|
DTATRASF=!_DATAORA
|
||||||
|
TIPDOC=:PN
|
||||||
|
DESDOC=!_DESMOV
|
||||||
|
NUMDOC=
|
||||||
|
DTADOC=!_D,DATAREG
|
||||||
|
NUMDOCFIS=NUMDOC
|
||||||
|
DTADOCFIS=!_D,DATADOC
|
||||||
|
DTAPERT=!_D,DATACOMP
|
||||||
|
AZIENDA=!_FIRM
|
||||||
|
TIPANA=TIPOCF
|
||||||
|
CODCF=CODCF
|
||||||
|
CODVAL=!_CODVAL
|
||||||
|
|
||||||
|
[24]
|
||||||
|
TABLE=AGA_PRJDET_T147_P
|
||||||
|
UNICO=
|
||||||
|
ARCH=!_FIRM,_MOV
|
||||||
|
UNICARCH=!_UNICMOV
|
||||||
|
UNICRIGA=NUMRIG
|
||||||
|
CODART=!_CODART
|
||||||
|
DESART=!_DESRMOV
|
||||||
|
QUANT=1
|
||||||
|
UNMIS=
|
||||||
|
CONSAL=
|
||||||
|
IMPVAL=IMPORTO
|
||||||
|
NUMCOMM=CODCMS
|
||||||
|
CODATTCM=
|
||||||
|
ELSPESA=!_ELSPESAMOV
|
||||||
|
CENTCOST=FASCMS
|
||||||
|
DTACONS=
|
||||||
|
RIFRICH=
|
||||||
|
RIFORD=
|
||||||
|
RIFBOL=
|
||||||
|
CODVAL=!_CODVAL
|
||||||
|
STATO_IMP=
|
||||||
|
SEGNO=SEZIONE
|
||||||
|
|
||||||
|
[33]
|
||||||
|
TABLE=AGA_PRJDOC_T146_P
|
||||||
|
UNICO=
|
||||||
|
ARCH=!_FIRM,_DOC
|
||||||
|
UNICARCH=!_UNICDOC
|
||||||
|
DTATRASF=!_DATAORA
|
||||||
|
TIPDOC=!_TIPODOC
|
||||||
|
DESDOC=!_DESDOC
|
||||||
|
NUMDOC=NDOC
|
||||||
|
DTADOC=!_D,DATADOC
|
||||||
|
NUMDOCFIS=NUMDOCRIF
|
||||||
|
DTADOCFIS=!_D,DATADOCRIF
|
||||||
|
DTAPERT=!_D,DATADOC
|
||||||
|
AZIENDA=!_FIRM
|
||||||
|
TIPANA=TIPOCF
|
||||||
|
CODCF=CODCF
|
||||||
|
CODVAL=!_CODVAL
|
||||||
|
|
||||||
|
[34]
|
||||||
|
TABLE=AGA_PRJDET_T147_P
|
||||||
|
UNICO=
|
||||||
|
ARCH=!_FIRM,_DOC
|
||||||
|
UNICARCH=!_UNICDOC
|
||||||
|
UNICRIGA=#RDOC,NRIGA
|
||||||
|
CODART=CODART
|
||||||
|
QUANT=#!_,QTA
|
||||||
|
DESART=!_T,70,DESCR
|
||||||
|
UNMIS=UMQTA
|
||||||
|
CONSAL=
|
||||||
|
IMPVAL=#!_,IMPORTO
|
||||||
|
NUMCOMM=#!_,COMMESSA
|
||||||
|
CODATTCM=
|
||||||
|
ELSPESA=!_ELSPESADOC
|
||||||
|
CENTCOST=#!_,FASE
|
||||||
|
DTACONS=#!_,DATACONS
|
||||||
|
RIFRICH=
|
||||||
|
RIFORD=!_RIFORD
|
||||||
|
RIFBOL=!_RIFBOL
|
||||||
|
CODVAL=!_CODVAL
|
||||||
|
STATO_IMP=
|
||||||
|
SEGNO=
|
||||||
|
|
||||||
|
[Tipo documento]
|
||||||
|
O=I**
|
||||||
|
B=IM*
|
||||||
|
BO=*M*
|
||||||
|
FB=**F
|
||||||
|
FO=*MF
|
||||||
|
F=IMF
|
||||||
|
|
||||||
|
[Codice valuta]
|
||||||
|
EUR=EU
|
||||||
|
|
||||||
|
[Descrizioni]
|
||||||
|
F01=Percentuale,QTAGG1|Giorni,QTAGG2
|
1081
crpa/crpa0.cpp
Executable file
1081
crpa/crpa0.cpp
Executable file
File diff suppressed because it is too large
Load Diff
613
crpa/pmc.sql
Executable file
613
crpa/pmc.sql
Executable file
@ -0,0 +1,613 @@
|
|||||||
|
CREATE TABLE PRACTOR_LOG (
|
||||||
|
LOG_ID NUMBER (10) NOT NULL,
|
||||||
|
TIPO VARCHAR2 (25) NOT NULL,
|
||||||
|
DATA DATE NOT NULL,
|
||||||
|
UTENTE VARCHAR2 (240) NOT NULL,
|
||||||
|
TESTO VARCHAR2 (240),
|
||||||
|
CONSTRAINT PRACTOR_LOGXP
|
||||||
|
PRIMARY KEY ( LOG_ID ) )
|
||||||
|
/
|
||||||
|
|
||||||
|
CREATE OR REPLACE PROCEDURE prcLog (vMessage PRACTOR_LOG.testo%TYPE) IS vErrMsg VARCHAR2(100);
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO PRACTOR_LOG VALUES (note_seq.NEXTVAL, '-', SYSDATE, USER, vMessage);
|
||||||
|
-- dbms_output.put_line(vMessage);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
vErrMsg := SQLERRM(SQLCODE);
|
||||||
|
INSERT INTO PRACTOR_LOG VALUES (note_seq.NEXTVAL, '-', SYSDATE, USER, vErrMsg);
|
||||||
|
END prcLog;
|
||||||
|
/
|
||||||
|
|
||||||
|
CREATE TABLE SMC_PRJDOC_T146 (
|
||||||
|
UNICO NUMBER,
|
||||||
|
ARCH VARCHAR2 (10) NOT NULL,
|
||||||
|
UNICARCH NUMBER NOT NULL,
|
||||||
|
DTATRASF DATE,
|
||||||
|
TIPDOC VARCHAR2 (2),
|
||||||
|
DESDOC VARCHAR2 (100),
|
||||||
|
NUMDOC VARCHAR2 (20),
|
||||||
|
DTADOC DATE,
|
||||||
|
NUMDOCFIS VARCHAR2 (20),
|
||||||
|
DTADOCFIS DATE,
|
||||||
|
DTAPERT DATE,
|
||||||
|
AZIENDA VARCHAR2 (3),
|
||||||
|
TIPANA VARCHAR2 (1),
|
||||||
|
CODCF VARCHAR2 (10),
|
||||||
|
CODVAL VARCHAR2 (3),
|
||||||
|
CONSTRAINT T146XP
|
||||||
|
PRIMARY KEY ( ARCH, UNICARCH ) )
|
||||||
|
/
|
||||||
|
|
||||||
|
ALTER TABLE SMC_PRJDOC_T146 ADD CONSTRAINT R011146
|
||||||
|
FOREIGN KEY (CODVAL)
|
||||||
|
REFERENCES PMC.VL_T011 (C_VL)
|
||||||
|
/
|
||||||
|
|
||||||
|
CREATE TABLE SMC_PRJDET_T147 (
|
||||||
|
UNICO NUMBER,
|
||||||
|
ARCH VARCHAR2 (10) NOT NULL,
|
||||||
|
UNICARCH NUMBER NOT NULL,
|
||||||
|
UNICRIGA NUMBER NOT NULL,
|
||||||
|
CODART VARCHAR2 (15),
|
||||||
|
DESART VARCHAR2 (70),
|
||||||
|
QUANT NUMBER,
|
||||||
|
UNMIS VARCHAR2 (3),
|
||||||
|
CONSAL VARCHAR2 (1),
|
||||||
|
IMPVAL NUMBER,
|
||||||
|
NUMCOMM VARCHAR2 (15),
|
||||||
|
CODATTCM VARCHAR2 (10),
|
||||||
|
ELSPESA VARCHAR2 (10),
|
||||||
|
CENTCOST VARCHAR2 (6),
|
||||||
|
DTACONS DATE,
|
||||||
|
RIFRICH VARCHAR2 (20),
|
||||||
|
RIFORD VARCHAR2 (20),
|
||||||
|
RIFBOL VARCHAR2 (20),
|
||||||
|
CODVAL VARCHAR2 (3),
|
||||||
|
STATO_IMP VARCHAR2 (1),
|
||||||
|
SEGNO VARCHAR2 (1),
|
||||||
|
CONSTRAINT T147XP
|
||||||
|
PRIMARY KEY ( ARCH, UNICARCH, UNICRIGA ) )
|
||||||
|
|
||||||
|
/
|
||||||
|
|
||||||
|
ALTER TABLE SMC_PRJDET_T147 ADD CONSTRAINT C146147
|
||||||
|
FOREIGN KEY (ARCH, UNICARCH)
|
||||||
|
REFERENCES PMC.SMC_PRJDOC_T146 (ARCH, UNICARCH) ON DELETE CASCADE
|
||||||
|
|
||||||
|
/
|
||||||
|
|
||||||
|
ALTER TABLE SMC_PRJDET_T147 ADD CONSTRAINT R011147
|
||||||
|
FOREIGN KEY (CODVAL)
|
||||||
|
REFERENCES PMC.VL_T011 (C_VL)
|
||||||
|
|
||||||
|
/
|
||||||
|
|
||||||
|
CREATE OR REPLACE TRIGGER SMC_PRJDET_G147_01 BEFORE INSERT ON SMC_PRJDET_T147 FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
TIPO SMC_PRJDOC_T146.TIPDOC%TYPE;
|
||||||
|
ATTIVITA SMC_PRJDET_T147.CODATTCM%TYPE;
|
||||||
|
PROJ PROG_T056.C_PROG%TYPE;
|
||||||
|
COSTO COSTO_AGRT_T022.P_COSTO%TYPE;
|
||||||
|
CAMBIORIF VL_T011.I_CB_CONS%TYPE;
|
||||||
|
CAMBIOPRJ VL_T011.I_CB_CONS%TYPE;
|
||||||
|
VALPRJ VL_T011.C_VL%TYPE;
|
||||||
|
ERRMSG PRACTOR_LOG.TESTO%TYPE;
|
||||||
|
baseERRMSG PRACTOR_LOG.TESTO%TYPE;
|
||||||
|
TCLASSE COSTO_AGRT_T022.T_CLASSE%TYPE;
|
||||||
|
numcosti NUMERIC;
|
||||||
|
CODCURVA CRV_DSBN_T013.C_CRV%TYPE;
|
||||||
|
|
||||||
|
DESSPESA CLASSE_DI_COSTO_T043.S_CLASSE%TYPE;
|
||||||
|
BASEINI DATE;
|
||||||
|
BASEFIN DATE;
|
||||||
|
FORINI DATE;
|
||||||
|
FORFIN DATE;
|
||||||
|
PELMNT STRU_T087.P_ELMNT%TYPE;
|
||||||
|
CBS PROG_T056.C_STRU%TYPE;
|
||||||
|
STIMA COSTO_AGRT_T022.I_STIMA_CMPL%TYPE;
|
||||||
|
BDG_REV COSTO_AGRT_T022.I_BDG_REV%TYPE;
|
||||||
|
COMM COSTO_AGRT_T022.I_COMM%TYPE;
|
||||||
|
ACEM COSTO_AGRT_T022.I_ACEM%TYPE;
|
||||||
|
CONS COSTO_AGRT_T022.I_CONS%TYPE;
|
||||||
|
CNTBZ COSTO_AGRT_T022.I_CNTBZ%TYPE;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
Prclog('-- Nuovo documento -----------------------------------------------------------------------------------');
|
||||||
|
Prclog('-- ARCH: '||:NEW.ARCH);
|
||||||
|
Prclog('-- UNICARCH: '||:NEW.UNICARCH);
|
||||||
|
Prclog('-- RIGA: '||:NEW.UNICRIGA);
|
||||||
|
-- Tipo documento
|
||||||
|
SELECT NVL(TIPDOC,'XX') INTO TIPO FROM SMC_PRJDOC_T146
|
||||||
|
WHERE
|
||||||
|
ARCH = :NEW.ARCH
|
||||||
|
AND UNICARCH = :NEW.UNICARCH;
|
||||||
|
Prclog('Tipo documento: '||TIPO);
|
||||||
|
|
||||||
|
IF TIPO <> 'XX' THEN
|
||||||
|
-- Ottengo il codice interno del progetto, il codice della valuta e il codice della
|
||||||
|
-- CBS di progetto. Il campo NUMCOMM del documento contiene il nome
|
||||||
|
-- del progetto (campo S_PROG_NOM della tabella PROG_T056).
|
||||||
|
-- Il nome Š univoco.
|
||||||
|
SELECT
|
||||||
|
C_PROG, NVL(C_VL, 'EUR'), C_STRU
|
||||||
|
INTO
|
||||||
|
PROJ, VALPRJ, CBS
|
||||||
|
FROM
|
||||||
|
PROG_T056
|
||||||
|
WHERE
|
||||||
|
S_PROG_NOM = :NEW.NUMCOMM;
|
||||||
|
-- log
|
||||||
|
Prclog('Codice progetto: '||PROJ);
|
||||||
|
Prclog('Codice valuta: '||VALPRJ);
|
||||||
|
Prclog('Codice CBS: '||CBS);
|
||||||
|
|
||||||
|
IF PROJ >= 0 THEN
|
||||||
|
-- CODICE COSTO
|
||||||
|
-- Controllo l'esistenza di un costo che abbia l'incrocio
|
||||||
|
-- corretto fra voce di spesa e attivit…
|
||||||
|
-- ELSPESA <--> S_NOME (voce dispesa ovvero nome del costo)
|
||||||
|
-- CODATTCM <--> TASK_UID (codice attivit…)
|
||||||
|
SELECT
|
||||||
|
NVL(COUNT(*),0)
|
||||||
|
INTO
|
||||||
|
NUMCOSTI
|
||||||
|
FROM
|
||||||
|
COSTO_AGRT_T022
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND S_NOME = :NEW.ELSPESA
|
||||||
|
AND TASK_UID = :NEW.CODATTCM;
|
||||||
|
-- 'SELECT NVL(P_COSTO,-1) INTO COSTO FROM COSTO_AGRT_T022 WHERE C_PROG = '||PROJ||' AND S_NOME = '||:NEW.ELSPESA||' AND TASK_UID = '||:NEW.CODATTCM||';';
|
||||||
|
|
||||||
|
IF NUMCOSTI = 0 THEN
|
||||||
|
-- Valori del costo
|
||||||
|
STIMA := 0;
|
||||||
|
BDG_REV := 0;
|
||||||
|
COMM := 0;
|
||||||
|
ACEM := 0;
|
||||||
|
CONS := 0;
|
||||||
|
CNTBZ := 0;
|
||||||
|
Prclog('Manca il costo ('||:NEW.ELSPESA||'), procedo all''inserimento.');
|
||||||
|
-- Codice costo
|
||||||
|
SELECT S022_P_COSTO.NEXTVAL INTO COSTO FROM dual;
|
||||||
|
Prclog('Nuovo codice costo: '||COSTO);
|
||||||
|
-- CODICE CURVA LINEARE (di default uso la curva lineare del progetto)
|
||||||
|
-- Il campo A_CRV_SIS indica il tipo di curva di sistema.
|
||||||
|
SELECT NVL(C_CRV, -1) INTO CODCURVA FROM CRV_DSBN_T013
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND A_CRV_SIS = 4;
|
||||||
|
Prclog('Codice curva lineare: '||CODCURVA);
|
||||||
|
-- DESCRIZIONE VOCE DI COSTO
|
||||||
|
-- Il campo nome contiene il codice della classe di costo,
|
||||||
|
-- Il campo descrizione contiene la descrizione della classe di costo
|
||||||
|
SELECT
|
||||||
|
NVL(S_CLASSE,'<Descrizione classe di costo>') INTO DESSPESA
|
||||||
|
FROM
|
||||||
|
CLASSE_DI_COSTO_T043
|
||||||
|
WHERE
|
||||||
|
C_CLASSE = :NEW.elspesa;
|
||||||
|
Prclog('Descrizione classe di costo: '||DESSPESA);
|
||||||
|
-- DATE RELATIVI ALL'ATTIVITA DI PROJECT
|
||||||
|
SELECT
|
||||||
|
NVL(TASK_BASE_START, SYSDATE()), NVL(TASK_BASE_FINISH, SYSDATE()), NVL(TASK_START_DATE, SYSDATE()), NVL(TASK_FINISH_DATE, SYSDATE())
|
||||||
|
INTO
|
||||||
|
BASEINI, BASEFIN, FORINI, FORFIN
|
||||||
|
FROM
|
||||||
|
MSP_TASKS
|
||||||
|
WHERE
|
||||||
|
PROJ_ID = PROJ
|
||||||
|
AND TASK_UID = :NEW.CODATTCM;
|
||||||
|
Prclog('Inizio: '||BASEINI||' Fine: '||BASEFIN||' Inizio forecast: '||FORINI||' Fine forecast: '||FORFIN);
|
||||||
|
-- CAMBIO DEL PROGETTO
|
||||||
|
SELECT NVL(I_CB_CONS, 1) INTO CAMBIOPRJ FROM VL_T011 WHERE C_VL = VALPRJ;
|
||||||
|
Prclog('Cambio: '||CAMBIOPRJ);
|
||||||
|
|
||||||
|
-- NODO CBS
|
||||||
|
-- Seleziono il nodo della CBS a cui associare il costo.
|
||||||
|
-- I nodi della CBS sono stati strutturati in modo che
|
||||||
|
-- rappresentino le voci di spesa del piano dei costi.
|
||||||
|
-- I primi due caratteri del nome del costo coincidono
|
||||||
|
-- con il nome della classe di costo inserita nella CBS.
|
||||||
|
-- es. voce di spesa (ELSPESA): 211 -- Emolumenti amministratori
|
||||||
|
-- Nella CBS andr… agganciata al nodo (C_ELMNT) 21 -- Stipendi
|
||||||
|
-- Si suppone che C_ELMNT sia univoco nella CBS. Non esiste per•
|
||||||
|
-- un indice nel database.
|
||||||
|
SELECT NVL(P_ELMNT,-1), NVL(T_CLASSE, 'C') INTO PELMNT, TCLASSE FROM
|
||||||
|
STRU_T087
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND C_STRU = CBS
|
||||||
|
AND C_ELMNT = SUBSTR(:NEW.ELSPESA,1,2);
|
||||||
|
--PRCLOG('SELECT NVL(P_ELMNT,-1) INTO PELMNT FROM STRU_T087 WHERE C_PROG = '||PROJ||' AND C_STRU = '''||CBS||''' AND C_ELMNT = SUBSTR('''||:NEW.ELSPESA||''',1,2);');
|
||||||
|
Prclog('Nodo ('||SUBSTR(:NEW.ELSPESA,1,2)||'): '||PELMNT);
|
||||||
|
IF PELMNT = -1 THEN
|
||||||
|
-- ATTACCO IL COSTO ALLA ROOT
|
||||||
|
SELECT NVL(P_ELMNT,-1) INTO PELMNT FROM
|
||||||
|
STRU_T087
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND C_STRU = CBS
|
||||||
|
AND P_ELMNT_PDR IS NULL;
|
||||||
|
TCLASSE := 'C';
|
||||||
|
Prclog('Nodo ('||SUBSTR(:NEW.ELSPESA,1,2)||') non trovato. Root: '||PELMNT);
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
IF PELMNT >= 0 THEN
|
||||||
|
-- Inserimento
|
||||||
|
INSERT INTO COSTO_AGRT_T022
|
||||||
|
(C_PROG, P_COSTO, S_DES, C_VL, C_CRV, D_INI_ORIG, D_FIN_ORIG, D_INI_REVIS, D_FIN_REVIS, PROJ_UID, TASK_UID, F_EARNED, S_NOME, T_CLASSE)
|
||||||
|
VALUES
|
||||||
|
(PROJ, COSTO, DESSPESA, VALPRJ, CODCURVA, BASEINI, BASEFIN, FORINI, FORFIN, PROJ, :NEW.CODATTCM, 0, :NEW.ELSPESA, TCLASSE);
|
||||||
|
-- ASSOCIAZIONE ALLA CBS
|
||||||
|
INSERT INTO ASCN_STRU_T021
|
||||||
|
(C_PROG, P_ELMNT, P_COSTO)
|
||||||
|
VALUES
|
||||||
|
(PROJ, PELMNT, COSTO);
|
||||||
|
ELSE
|
||||||
|
Prclog('Impossibile trovare un nodo nella CBS per il costo ('||SUBSTR(:NEW.ELSPESA,1,2)||').');
|
||||||
|
END IF; -- pelmnt >= 0
|
||||||
|
|
||||||
|
ELSE -- NUMCOSTI = 0
|
||||||
|
|
||||||
|
-- il costo esiste: ottengo il codice, il tipo e la stima a completamento
|
||||||
|
SELECT
|
||||||
|
NVL(P_COSTO, -1), NVL(T_CLASSE,'C'), NVL(I_STIMA_CMPL, 0), NVL(I_BDG_REV, 0),
|
||||||
|
NVL(I_COMM, 0), NVL(I_ACEM, 0), NVL(I_CONS, 0), NVL(CNTBZ, 0)
|
||||||
|
INTO
|
||||||
|
COSTO, TCLASSE, STIMA, BDG_REV,
|
||||||
|
COMM, ACEM, CONS, CNTBZ
|
||||||
|
FROM
|
||||||
|
COSTO_AGRT_T022
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND S_NOME = :NEW.ELSPESA
|
||||||
|
AND TASK_UID = :NEW.CODATTCM;
|
||||||
|
Prclog('Codice costo: '||COSTO);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF COSTO >= 0 THEN
|
||||||
|
Prclog('Aggiornamento valori del costo ('||COSTO||').');
|
||||||
|
-- CAMBIO DEL PROGETTO
|
||||||
|
SELECT NVL(I_CB_CONS, 0) INTO CAMBIOPRJ FROM VL_T011 WHERE C_VL = VALPRJ;
|
||||||
|
Prclog('Valore cambio: '||CAMBIOPRJ );
|
||||||
|
IF CAMBIOPRJ > 0 THEN
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
-- ORDINE DI ACQUISTO
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
IF TIPO = 'OA' THEN
|
||||||
|
Prclog ('Tipo documento: OA');
|
||||||
|
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
|
||||||
|
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_COMM = NVL(I_COMM,0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_COMM_VL = NVL(I_COMM_VL,0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_COMM_CURR = NVL(I_COMM_CURR,0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_COMM_CURR_VL = NVL(I_COMM_CURR_VL,0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
|
||||||
|
COMM := COMM + NVL(:NEW.IMPVAL, 0);
|
||||||
|
Prclog('Impeganto: '||COMM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
|
||||||
|
|
||||||
|
-- Se l'impegnato supera il budget aumento la stima a finire
|
||||||
|
IF COMM > STIMA THEN
|
||||||
|
Prclog('Aggiorno la stima a completamento.');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_STIMA_CMPL = COMM,
|
||||||
|
I_STIMA_CMPL_VL = COMM * CAMBIOPRJ
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
:NEW.STATO_IMP := 'I';
|
||||||
|
END IF;
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
-- BOLLA DI ENTRATA
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
IF TIPO = 'BA' THEN
|
||||||
|
Prclog ('Tipo documento: BA');
|
||||||
|
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
|
||||||
|
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
|
||||||
|
ACEM := ACEM + NVL(:NEW.IMPVAL, 0);
|
||||||
|
Prclog('Maturato: '||ACEM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
|
||||||
|
|
||||||
|
-- Se l'impegnato supera il budget aumento la stima a finire
|
||||||
|
IF ACEM > STIMA THEN
|
||||||
|
Prclog('Aggiorno la stima a completamento.');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_STIMA_CMPL = ACEM,
|
||||||
|
I_STIMA_CMPL_VL = ACEM * CAMBIOPRJ
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
:NEW.STATO_IMP := 'I';
|
||||||
|
END IF;
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
-- FATTURA DI ACQUISTO
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
IF TIPO = 'FA' THEN
|
||||||
|
Prclog ('FA');
|
||||||
|
Prclog ('IMPORTO: '||NVL(:NEW.IMPVAL, 0));
|
||||||
|
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CONS = NVL(I_CONS, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CONS_VL = NVL(I_CONS_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CONS_CURR = NVL(I_CONS_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CONS_CURR_VL = NVL(I_CONS_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
|
||||||
|
CONS := CONS + NVL(:NEW.IMPVAL, 0);
|
||||||
|
Prclog('Fatturato: '||CONS||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
|
||||||
|
|
||||||
|
-- Se l'impegnato supera il budget aumento la stima a finire
|
||||||
|
IF CONS > STIMA THEN
|
||||||
|
Prclog('Aggiorno la stima a completamento.');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_STIMA_CMPL = CONS,
|
||||||
|
I_STIMA_CMPL_VL = CONS * CAMBIOPRJ
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
:NEW.STATO_IMP := 'I';
|
||||||
|
END IF;
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
-- Movimento dalla contabilit… analitica
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
IF TIPO = 'AN' THEN
|
||||||
|
Prclog ('Movimento dalla contabilit… analitica.');
|
||||||
|
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
|
||||||
|
Prclog ('Segno: '||NVL(:NEW.IMPVAL, 0));
|
||||||
|
Prclog ('Classe: '||TCLASSE);
|
||||||
|
IF TCLASSE = 'C' THEN
|
||||||
|
-- Costo
|
||||||
|
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
|
||||||
|
-- Dare
|
||||||
|
Prclog ('Operazione: sommo contabilizzato e maturato.');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
ELSE
|
||||||
|
-- Avere
|
||||||
|
Prclog ('Operazione: sottraggo contabilizzato e maturato.');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
END IF;
|
||||||
|
ELSE
|
||||||
|
-- Ricavo
|
||||||
|
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
|
||||||
|
-- Dare
|
||||||
|
Prclog ('Operazione: sottraggo contabilizzato e maturato.');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_ACEM = NVL(I_ACEM, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_VL = NVL(I_ACEM_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
ELSE
|
||||||
|
-- Avere
|
||||||
|
Prclog ('Operazione: sommo contabilizzato e maturato.');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
END IF;
|
||||||
|
END IF; -- T_CLASSE = 'C'
|
||||||
|
|
||||||
|
-- CNTBZ := CNTBZ + NVL(:NEW.IMPVAL, 0);
|
||||||
|
-- ACEM := ACEM + NVL(:NEW.IMPVAL, 0);
|
||||||
|
-- Prclog('Contabilizzato: '||CNTBZ||' Maturato: '||ACEM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
|
||||||
|
-- -- Se il maturato o il contabilizzato superano il budget aumento la stima a finire
|
||||||
|
-- IF CNTBZ < ACEM THEN
|
||||||
|
-- CNTBZ := ACEM;
|
||||||
|
-- END IF;
|
||||||
|
-- IF (CNTBZ > STIMA) THEN
|
||||||
|
-- Prclog('Aggiorno la stima a completamento.');
|
||||||
|
-- UPDATE COSTO_AGRT_T022
|
||||||
|
-- SET
|
||||||
|
-- I_STIMA_CMPL = CNTBZ,
|
||||||
|
-- I_STIMA_CMPL_VL = CNTBZ * CAMBIOPRJ
|
||||||
|
-- WHERE
|
||||||
|
-- C_PROG = PROJ
|
||||||
|
-- AND P_COSTO = COSTO;
|
||||||
|
-- END IF;
|
||||||
|
|
||||||
|
:NEW.STATO_IMP := 'I';
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
-- Movimento dalla contabilit… analitica derivante da un documento.
|
||||||
|
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
|
||||||
|
IF TIPO = 'FM' THEN
|
||||||
|
Prclog ('Movimento dalla contabilit… analitica derivante da un documento.');
|
||||||
|
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
|
||||||
|
Prclog ('Segno: '||NVL(:NEW.IMPVAL, 0));
|
||||||
|
Prclog ('Classe: '||TCLASSE);
|
||||||
|
|
||||||
|
IF TCLASSE = 'C' THEN
|
||||||
|
-- Costo
|
||||||
|
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
|
||||||
|
-- Dare
|
||||||
|
Prclog ('Contabilit… analitica, Costo, Dare (+).');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
ELSE
|
||||||
|
-- Avere
|
||||||
|
Prclog ('Contabilit… analitica, Costo, Avere (-).');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
END IF;
|
||||||
|
ELSE
|
||||||
|
-- Ricavo
|
||||||
|
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
|
||||||
|
-- Dare
|
||||||
|
Prclog ('Contabilit… analitica, Ricavo, Dare (-).');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) - NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
ELSE
|
||||||
|
-- Avere
|
||||||
|
Prclog ('Contabilit… analitica, Ricavo, Avere (+).');
|
||||||
|
UPDATE COSTO_AGRT_T022
|
||||||
|
SET
|
||||||
|
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
|
||||||
|
|
||||||
|
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
|
||||||
|
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
|
||||||
|
|
||||||
|
WHERE
|
||||||
|
C_PROG = PROJ
|
||||||
|
AND P_COSTO = COSTO;
|
||||||
|
END IF;
|
||||||
|
END IF; -- T_CLASSE = 'C'
|
||||||
|
|
||||||
|
-- CNTBZ := CNTBZ + NVL(:NEW.IMPVAL, 0);
|
||||||
|
--
|
||||||
|
-- Prclog('Contabilizzato: '||CNTBZ||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
|
||||||
|
-- -- Se il maturato o il contabilizzato superano il budget aumento la stima a finire
|
||||||
|
-- IF (CNTBZ > STIMA) THEN
|
||||||
|
-- Prclog('Aggiorno la stima a completamento.');
|
||||||
|
-- UPDATE COSTO_AGRT_T022
|
||||||
|
-- SET
|
||||||
|
-- I_STIMA_CMPL = CNTBZ,
|
||||||
|
-- I_STIMA_CMPL_VL = CNTBZ * CAMBIOPRJ
|
||||||
|
-- WHERE
|
||||||
|
-- C_PROG = PROJ
|
||||||
|
-- AND P_COSTO = COSTO;
|
||||||
|
-- END IF;
|
||||||
|
|
||||||
|
:NEW.STATO_IMP := 'I';
|
||||||
|
END IF; -- TIPO = 'FM
|
||||||
|
ELSE
|
||||||
|
PrcLog('Cambio non trovato ('||VALPRJ||').');
|
||||||
|
END IF; -- CAMBIOPRJ > 0
|
||||||
|
END IF;
|
||||||
|
ELSE
|
||||||
|
Prclog ('Il nome del progetto ('||:NEW.NUMCOMM||') non Š stato trovato.');
|
||||||
|
END IF; -- PROJ > 0
|
||||||
|
else -- Tipo documento
|
||||||
|
Prclog ('Manca il tipo documento.');
|
||||||
|
END IF; -- Tipo documento
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
Prclog ('ERRORE: '|| SQLERRM(SQLCODE));
|
||||||
|
|
||||||
|
END;
|
||||||
|
/
|
204
crpa/search.cpp
Executable file
204
crpa/search.cpp
Executable file
@ -0,0 +1,204 @@
|
|||||||
|
error_type TContabilizzazione::search_costo_ricavo(TBill& conto, const TRiga_documento& r)
|
||||||
|
{
|
||||||
|
TConfig conf(CONFIG_DITTA, "ve");
|
||||||
|
_search_seq = new TToken_string((const char*)conf.get("RICERCACR","ve"));
|
||||||
|
// costruisce la stringa che controlla la ricerca del conto costo/ricavo
|
||||||
|
// Attenzione! non esegue alcun controllo di consistenza sulla corretta sequenza
|
||||||
|
// presuppone che il programma di configurazione abbia generato correttamente
|
||||||
|
// il tutto.
|
||||||
|
if (_search_seq->items() == 0)
|
||||||
|
{
|
||||||
|
error_box("Non e' abilitata alcuna ricerca per il conto di costo/ricavo in configurazione.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
const int items = _search_seq->items();
|
||||||
|
TLocalisamfile& cli_file = _clifo->lfile(); // YES, arriva qui dentro quando la relazione e' gia' posizionata
|
||||||
|
const bool is_cli = cli_file.get(CLI_TIPOCF) == "C";
|
||||||
|
bool skip_art_related = FALSE;
|
||||||
|
bool skip_clifo = _clifo->bad();
|
||||||
|
TCodiceIVA codiva(r.get(RDOC_CODIVA));
|
||||||
|
const char t = r.tipo().tipo();
|
||||||
|
|
||||||
|
// Istanzia la causale del documento corrente...
|
||||||
|
const TTipo_documento& tipo = _doc->tipo();
|
||||||
|
TString16 codcaus(tipo.causale());
|
||||||
|
|
||||||
|
TToken_string key;
|
||||||
|
key.add(_doc->get(DOC_TIPOCF));
|
||||||
|
key.add(_doc->get(DOC_CODCF));
|
||||||
|
|
||||||
|
const TRectype & cfven = cache().get(LF_CFVEN, key);
|
||||||
|
const TString16 caus_cli(cfven.get(CFV_CODCAUS));
|
||||||
|
|
||||||
|
if (caus_cli.not_empty())
|
||||||
|
codcaus = caus_cli;
|
||||||
|
_caus = new TCausale(codcaus,data_reg.year());
|
||||||
|
|
||||||
|
int gr,co;
|
||||||
|
long so;
|
||||||
|
|
||||||
|
switch (t)
|
||||||
|
{
|
||||||
|
case 'O': // righe omaggio come articoli spiaccicato identico (avranno imponibile 0)
|
||||||
|
case 'M': // righe di merce
|
||||||
|
{
|
||||||
|
// posiziona l'anagrafica sull'articolo specificato sulla ..iga
|
||||||
|
TString80 codart = r.get(RDOC_CODARTMAG);
|
||||||
|
if codart.blank()
|
||||||
|
codart = r.get(RDOC_CODART);
|
||||||
|
_anamag->put(ANAMAG_CODART, codart);
|
||||||
|
if (_anamag->read() != NOERR) // se non trova l'articolo saltera' anche gmc,smc,rfa.
|
||||||
|
skip_art_related = TRUE;
|
||||||
|
|
||||||
|
TString16 tok;
|
||||||
|
// Scorre la stringa di ricerca
|
||||||
|
for (int i=0;i<items;i++)
|
||||||
|
{
|
||||||
|
tok = _search_seq->get(i);
|
||||||
|
if (tok == "CF")
|
||||||
|
{
|
||||||
|
if (skip_clifo) continue;
|
||||||
|
gr = cli_file.get_int(CLI_GRUPPORIC);
|
||||||
|
co = cli_file.get_int(CLI_CONTORIC);
|
||||||
|
so = cli_file.get_long(CLI_SOTTOCRIC);
|
||||||
|
conto.set(gr,co,so);
|
||||||
|
if (conto.ok()) break; // se lo trova esce (tutti != 0)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (tok == "CA")
|
||||||
|
{
|
||||||
|
|
||||||
|
CHECK(_caus,"Causale documento non valida");
|
||||||
|
if (_caus->IVA2bill(codiva,conto)) break; // se lo trova esce
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (tok == "AR")
|
||||||
|
{
|
||||||
|
if (skip_art_related) continue;
|
||||||
|
gr = _anamag->get_int(is_cli ? ANAMAG_GRUPPOV : ANAMAG_GRUPPOA);
|
||||||
|
co = _anamag->get_int(is_cli ? ANAMAG_CONTOV : ANAMAG_CONTOA);
|
||||||
|
so = _anamag->get_long(is_cli ? ANAMAG_SOTTOCV : ANAMAG_SOTTOCA);
|
||||||
|
conto.set(gr,co,so);
|
||||||
|
if (!conto.ok()) // se il conto non c'e' guarda la categoria acquisti/vendite
|
||||||
|
{
|
||||||
|
TTable *t = is_cli ? _cra : _caa;
|
||||||
|
|
||||||
|
t->put("CODTAB",_anamag->get(is_cli ? ANAMAG_CATCONV : ANAMAG_CATCONA));
|
||||||
|
if (t->read() == NOERR)
|
||||||
|
{
|
||||||
|
gr = atoi(t->get("S1"));
|
||||||
|
co = atoi(t->get("S2"));
|
||||||
|
so = atol(t->get("S3"));
|
||||||
|
conto.set(gr,co,so);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (conto.ok()) break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (tok == "GM" || tok == "SM" || tok == "RF")
|
||||||
|
{
|
||||||
|
if (skip_art_related) continue;
|
||||||
|
const bool is_fis = tok == "RF";
|
||||||
|
TTable * tab = is_fis ? _rfa : _gmc;
|
||||||
|
TString16 codtab(_anamag->get(is_fis ? ANAMAG_RAGGFIS : ANAMAG_GRMERC));
|
||||||
|
if (tok == "GM" && codtab.len() > 3)
|
||||||
|
codtab.cut(3); // gli ultimi 2 si riferiscono al sottogruppo.
|
||||||
|
tab->put("CODTAB",codtab);
|
||||||
|
if (tab->read() == NOERR)
|
||||||
|
{
|
||||||
|
gr = tab->get_int(is_cli ? "I3" : "I0");
|
||||||
|
co = tab->get_int(is_cli ? "I4" : "I1");
|
||||||
|
so = tab->get_long(is_cli ? "I5" : "I2");
|
||||||
|
conto.set(gr,co,so);
|
||||||
|
}
|
||||||
|
if (conto.ok()) break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (tok == "CV" || tok == "CC")
|
||||||
|
{
|
||||||
|
const bool is_cve = tok == "CV";
|
||||||
|
if (is_cve && !is_cli) continue; // se e' un fornitore salta questa condizione
|
||||||
|
TTable* t = is_cve ? _cve : _cco;
|
||||||
|
TString16 cod(is_cve ? r.doc().get(DOC_CATVEN) : EMPTY_STRING);
|
||||||
|
if (cod.empty())
|
||||||
|
{
|
||||||
|
if (skip_clifo) continue; // se non aveva trovato il cliente salta al prossimo
|
||||||
|
cod = _clifo->lfile(LF_CFVEN).get(is_cve ? CFV_CATVEN : CFV_CODCATC);
|
||||||
|
}
|
||||||
|
t->put("CODTAB",cod);
|
||||||
|
if (t->read() == NOERR)
|
||||||
|
{
|
||||||
|
const bool x =(is_cve || is_cli);
|
||||||
|
gr = t->get_int(x ? "I3" : "I0");
|
||||||
|
co = t->get_int(x ? "I4" : "I1");
|
||||||
|
so = t->get_long(x ? "I5": "I2");
|
||||||
|
conto.set(gr,co,so);
|
||||||
|
}
|
||||||
|
if (conto.ok()) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break; // case 'M'
|
||||||
|
}
|
||||||
|
case 'P': // righe prestazione
|
||||||
|
case 'S': // righe spese
|
||||||
|
{
|
||||||
|
TTable* tab = t == 'P' ? _prs : _spp;
|
||||||
|
tab->put("CODTAB",r.get(RDOC_CODART));
|
||||||
|
if (tab->read()==NOERR)
|
||||||
|
{
|
||||||
|
gr = tab->get_int(is_cli ? "I0" : "I3");
|
||||||
|
co = tab->get_int(is_cli ? "I1" : "I4");
|
||||||
|
so = tab->get_long(is_cli ? "I2" : "I5");
|
||||||
|
conto.set(gr,co,so);
|
||||||
|
if (!is_cli && !conto.ok())
|
||||||
|
{
|
||||||
|
gr = r.get_int("QTAGG1");
|
||||||
|
co = r.get_int("QTAGG2");
|
||||||
|
so = r.get_long("QTAGG3");
|
||||||
|
conto.set(gr,co,so);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!conto.find() && t == 'P') // Cerca il conto nella stringa di ricerca (solo per prestazioni)
|
||||||
|
{
|
||||||
|
TString16 tok;
|
||||||
|
// Scorre la stringa di ricerca ma solo per causale o CLI/FO
|
||||||
|
for (int i=0;i<items;i++)
|
||||||
|
{
|
||||||
|
tok = _search_seq->get(i);
|
||||||
|
if (tok == "CF")
|
||||||
|
{
|
||||||
|
if (skip_clifo) continue;
|
||||||
|
gr = cli_file.get_int(CLI_GRUPPORIC);
|
||||||
|
co = cli_file.get_int(CLI_CONTORIC);
|
||||||
|
so = cli_file.get_long(CLI_SOTTOCRIC);
|
||||||
|
conto.set(gr,co,so);
|
||||||
|
if (conto.ok()) break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (tok == "CA")
|
||||||
|
{
|
||||||
|
CHECK(_caus,"Causale documento non valida");
|
||||||
|
if (_caus->IVA2bill(codiva,conto)) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break; // case 'P','S'
|
||||||
|
}
|
||||||
|
case 'C':
|
||||||
|
// righe sconti: vengono considerate in adjust_sconto_rows()
|
||||||
|
case 'D': // righe descrizioni (saltare)
|
||||||
|
default :
|
||||||
|
break;
|
||||||
|
} // end of switch
|
||||||
|
if (good())
|
||||||
|
{
|
||||||
|
if (conto.ok() == 0 || !conto.find())
|
||||||
|
{
|
||||||
|
_conto_errato = conto;
|
||||||
|
_error = conto_error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _error;
|
||||||
|
}
|
||||||
|
|
4
crpa/ts_pmc.sql
Executable file
4
crpa/ts_pmc.sql
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
create tablespace pmc001td
|
||||||
|
datafile 'g:\oracle\appdata\crpa\pmc001td.dbf' size 32M;
|
||||||
|
create tablespace pmc001ti
|
||||||
|
datafile 'g:\oracle\appdata\crpa\pmc001ti.dbf' size 10M;
|
8
crpa/user_pmc.sql
Executable file
8
crpa/user_pmc.sql
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
create user pmc
|
||||||
|
identified by pmc
|
||||||
|
default tablespace pmc001td
|
||||||
|
quota unlimited on pmc001td
|
||||||
|
temporary tablespace temp;
|
||||||
|
alter user pmc
|
||||||
|
quota unlimited on pmc001ti;
|
||||||
|
grant connect, resource to pmc;
|
Loading…
x
Reference in New Issue
Block a user