Patch level : 12.0 598

Files correlati     : cg, ve, ba, fp
Commento            : Prima release del modulo fp

BA:
- Aggiunto campo "Modalità di Pagamento" alla tabella "Ulteriore classificazione"
- Aggiunto campo "Tipo di pagamento SDI" al programma di gestione dei tipi pagamento

CG:
Modifiche programma clienti/fornitori:
- Rinominato gruppo da "Numeri telefonici" a "Contatti"
- Spostati e modificati campi delle email per aggiungere la PEC

Modifiche cgpagame:
- Aggiunto _cond_pag e gestione del campo

VE:
Modifiche ai tipidoc
- Aggiunto tipo documenti SDI
- Aggiunto il regime fiscale

FP:
- prima implementazione del modulo

Interne:
- In applicat rimosso blocco in caso di programma non abilitato per rangers
- Aggiunto in modaut il nuovo programma fp
- Resa cid2index static con metodo in xvtility
- Perfezionata libreria tsdb + xvtdb grazie ai test fatti da me medesimo per l'fp
This commit is contained in:
Mattia Tollari 2018-07-06 16:30:37 +02:00
parent faa0e2b6ec
commit 9520fe2efd
65 changed files with 16483 additions and 4203 deletions

View File

@ -13,7 +13,7 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{D53794B2-2BDD-4D8F-BEFF-A65DA01D5B03}</ProjectGuid>
<RootNamespace>ba_masktab</RootNamespace>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@ -403,6 +403,36 @@
<FileType>Document</FileType>
</TrrCompiler>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\ba\batbais.h" />
<ClInclude Include="..\src\ba\batbban.h" />
<ClInclude Include="..\src\ba\batbcig.h" />
<ClInclude Include="..\src\ba\batbclr.h" />
<ClInclude Include="..\src\ba\batbcrs.h" />
<ClInclude Include="..\src\ba\batbcup.h" />
<ClInclude Include="..\src\ba\batbdet.h" />
<ClInclude Include="..\src\ba\batbitl.h" />
<ClInclude Include="..\src\ba\batbiva.h" />
<ClInclude Include="..\src\ba\batblis.h" />
<ClInclude Include="..\src\ba\batblng.h" />
<ClInclude Include="..\src\ba\batbnoc.h" />
<ClInclude Include="..\src\ba\batbois.h" />
<ClInclude Include="..\src\ba\batbpri.h" />
<ClInclude Include="..\src\ba\batbrgi.h" />
<ClInclude Include="..\src\ba\batbsad.h" />
<ClInclude Include="..\src\ba\batbsce.h" />
<ClInclude Include="..\src\ba\batbsta.h" />
<ClInclude Include="..\src\ba\batbstt.h" />
<ClInclude Include="..\src\ba\batbtrb.h" />
<ClInclude Include="..\src\ba\batbucc.h" />
<ClInclude Include="..\src\ba\batbucs.h" />
<ClInclude Include="..\src\ba\batbues.h" />
<ClInclude Include="..\src\ba\batbuid.h" />
<ClInclude Include="..\src\ba\batbuiv.h" />
<ClInclude Include="..\src\ba\batbure.h" />
<ClInclude Include="..\src\ba\batbval.h" />
<ClInclude Include="..\src\ba\batbvid.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="CampoRules.targets" />

View File

@ -19,6 +19,9 @@
<Filter Include="Trr">
<UniqueIdentifier>{d07d5cc7-7455-46b6-a38b-52bf67307d98}</UniqueIdentifier>
</Filter>
<Filter Include="Headers">
<UniqueIdentifier>{753adcac-715d-4825-b50c-58fdf0db114b}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<MskCompiler Include="..\src\ba\bastais.uml">
@ -159,6 +162,9 @@
<MskCompiler Include="..\src\ba\batbcup.uml">
<Filter>Mask</Filter>
</MskCompiler>
<MskCompiler Include="..\src\ba\batbpri.uml">
<Filter>Mask</Filter>
</MskCompiler>
</ItemGroup>
<ItemGroup>
<RepCompiler Include="..\src\ba\bastais.rep">
@ -384,4 +390,90 @@
<Filter>Trr</Filter>
</TrrCompiler>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\ba\batbois.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbpri.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbrgi.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbsad.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbsce.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbsta.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbstt.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbtrb.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbucc.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbucs.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbues.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbuid.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbuiv.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbure.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbval.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbvid.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbais.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbban.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbcig.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbclr.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbcrs.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbcup.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbdet.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbitl.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbiva.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batblis.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batblng.h">
<Filter>Headers</Filter>
</ClInclude>
<ClInclude Include="..\src\ba\batbnoc.h">
<Filter>Headers</Filter>
</ClInclude>
</ItemGroup>
</Project>

Binary file not shown.

Binary file not shown.

View File

@ -35,8 +35,16 @@
#endif
#include <time.h>
#include <stdarg.h>
#if (defined(_MSC_VER) && _MSC_VER >= 1600) || (defined(__BORLANDC__) && __BORLANDC__ >= 0x0630) || defined(__GNUC__) || defined(__SUNPRO_C)
#define SA_HAVE_STDINT_H
#include <stdint.h>
#endif
#include <limits.h>
#ifndef SIZE_MAX
#define SIZE_MAX ULONG_MAX
#endif
#ifdef SQLAPI_WINDOWS
// 64-bit integer
typedef __int64 sa_int64_t;
@ -53,10 +61,7 @@ typedef unsigned long long int sa_uint64_t;
#ifdef SA_USE_STL
#include <string>
#endif
#ifndef SIZE_MAX
#define SIZE_MAX UINT_MAX
#include <hash_map>
#endif
class ISAClient;
@ -115,6 +120,8 @@ typedef
SA_SQLite_Client,
//! SQL Anywere
SA_SQLAnywhere_Client,
//! CubeSQL
SA_CubeSQL_Client,
_SA_Client_Reserverd = (int)(((unsigned int)(-1))/2)
} SAClient_t;
@ -127,11 +134,31 @@ typedef
SA_UserGenerated_Error,
//! the Library-generated error
SA_Library_Error,
//! DBMS API error occured
//! DBMS API error occurred
SA_DBMS_API_Error,
_SA_ErrorClass_Reserved = (int)(((unsigned int)(-1))/2)
} SAErrorClass_t;
typedef
enum eSALibraryErrorType
{
SA_Library_Error_Nomem,
SA_Library_Error_ClientNotSet,
SA_Library_Error_ClientNotSupported,
SA_Library_Error_LoadLibraryFails,
SA_Library_Error_GetLibraryVersionFails,
SA_Library_Error_ClienVersionOld,
SA_Library_Error_ClientInitFails,
SA_Library_Error_BindVarNotFound,
SA_Library_Error_FieldNotFound,
SA_Library_Error_UnknownDataType,
SA_Library_Error_UnknownParameterType,
SA_Library_Error_UnknownColumnType,
SA_Library_Error_WrongConversion,
SA_Library_Error_WrongDatetime,
_SA_Library_Error_Reserved = (int)(((unsigned int)(-1)) / 2)
} SALibraryErrorType_t;
typedef
enum eSAIsolationLevel
{
@ -319,7 +346,7 @@ public:
SAString(const wchar_t *lpch, size_t nLength);
//! Initializes SAString from unsigned characters (converts to SAChar)
SAString(const unsigned char *psz);
//! Special constructor for binary data (no converion to SAChar)
//! Special constructor for binary data (no conversion to SAChar)
SAString(const void *pBuffer, size_t nLengthInBytes);
// Attributes & Operations
@ -413,12 +440,12 @@ public:
//! Remove continuous occurrences of chTarget starting from right
void TrimRight(SAChar chTarget);
//! Remove continuous occcurrences of characters in passed string,
//! Remove continuous occurrences of characters in passed string,
// starting from right
void TrimRight(const SAChar *lpszTargets);
//! Remove continuous occurrences of chTarget starting from left
void TrimLeft(SAChar chTarget);
//! Remove continuous occcurrences of characters in
//! Remove continuous occurrences of characters in
// passed string, starting from left
void TrimLeft(const SAChar *lpszTargets);
@ -498,14 +525,14 @@ public:
const char *GetUTF8Chars() const;
// get string length (in UTF8 characters)
size_t GetUTF8CharsLength() const;
// assing UTF8 data
// assign UTF8 data
void SetUTF8Chars(const char* szSrc, size_t nSrcLen = SIZE_MAX);
#endif // SA_UNICODE
// return pointer to const UTF16 string
const void *GetUTF16Chars() const;
// get string length (in UTF16 characters)
size_t GetUTF16CharsLength() const;
// assing UTF16 data
// assign UTF16 data
void SetUTF16Chars(const void* szSrc, size_t nSrcLen = SIZE_MAX);
// Implementation
@ -539,10 +566,6 @@ protected:
public:
SAString(const std::string &stringSrc);
SAString(const std::wstring &stringSrc);
const SAString &operator=(const std::string &stringSrc);
const SAString &operator=(const std::wstring &stringSrc);
const SAString &operator+=(const std::string &stringSrc);
const SAString &operator+=(const std::wstring &stringSrc);
#endif
};
@ -640,7 +663,6 @@ public:
private:
double m_interval;
unsigned int m_nFraction; // 0..999999999
};
//! Provides support for manipulating date/time values
@ -739,8 +761,12 @@ public:
class SQLAPI_API saOptions
{
#ifdef SA_USE_STL
std::hash_map<std::string, SAParam*> *m_pOptions;
#else
int m_nOptionCount;
SAParam **m_ppOptions;
#endif
private:
// disable copy constructor
@ -754,6 +780,8 @@ public:
SAString &operator[](const SAString &sOptionName);
SAString operator[](const SAString &sOptionName) const;
int size() const;
SAString operator[](int nIndex) const;
};
//! Represents an unique session with a data source
@ -822,6 +850,8 @@ public:
SAString &setOption(const SAString &sOptionName);
SAString Option(const SAString &sOptionName) const;
int TotalOptions() const;
SAString Option(int nIndex) const;
saAPI *NativeAPI() const SQLAPI_THROW(SAException);
saConnectionHandles *NativeHandles() SQLAPI_THROW(SAException);
@ -910,7 +940,8 @@ private:
size_t nFieldSize,
int nFieldPrecision,
int nFieldScale,
bool bFieldRequired);
bool bFieldRequired,
int nTotalFieldCount);
void DestroyFields();
// parses sql statement and create bind parameters array if any (In)
@ -1006,6 +1037,8 @@ public:
SAString &setOption(const SAString &sOptionName);
SAString Option(const SAString &sOptionName) const;
int TotalOptions() const;
SAString Option(int nIndex) const;
saCommandHandles *NativeHandles() SQLAPI_THROW(SAException);
void setBatchExceptionPreHandler(PreHandleException_t fnHandler, void* pAddlData);
@ -1037,6 +1070,7 @@ class SQLAPI_API SAValueRead
friend class Isl3Cursor;
friend class IssNCliCursor;
friend class IasaCursor;
friend class IcubeSqlCursor;
protected:
SALongOrLobReaderModes_t m_eReaderMode;
@ -1184,6 +1218,7 @@ class SQLAPI_API SAValue : public SAValueRead
friend class Isl3Cursor;
friend class IssNCliCursor;
friend class IasaCursor;
friend class IcubeSqlCursor;
private:
bool m_bInternalUseDefault;
@ -1203,6 +1238,12 @@ protected:
size_t nCallerMaxSize,
void *&pBuf);
private:
// disable copy constructor
SAValue(const SAValue &);
// disable assignment operator
SAValue &operator = (const SAValue &);
public:
SAValue(SADataType_t eDataType);
virtual ~SAValue();
@ -1461,6 +1502,8 @@ public:
SAString &setOption(const SAString &sOptionName);
SAString Option(const SAString &sOptionName) const;
int TotalOptions() const;
SAString Option(int nIndex) const;
};
class SQLAPI_API SAException
@ -1515,6 +1558,9 @@ public:
SQLAPI_EXCEPTION_HAS_CUSTOM_MEMBERS
#endif
public:
SAException& operator=(const SAException &other);
protected:
SAErrorClass_t m_eErrorClass;
int m_nNativeError;
@ -1569,8 +1615,8 @@ public:
};
#define SQLAPI_VER_MAJOR 4
#define SQLAPI_VER_MINOR 1
#define SQLAPI_VER_BUILD 5
#define SQLAPI_VER_MINOR 2
#define SQLAPI_VER_BUILD 2
#endif // !defined(__SQLAPI_H__)

View File

@ -0,0 +1,124 @@
//////////////////////////////////////////////////////////////////////
// cubeSqlAPI.h
//////////////////////////////////////////////////////////////////////
#if !defined(__CUBESQLAPI_H__)
#define __CUBESQLAPI_H__
#include <SQLAPI.h>
#include <cubesql.h>
extern void AddCubeSqlSupport(const SAConnection * pCon);
extern void ReleaseCubeSqlSupport();
typedef int (*cubesql_connect_t)(csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, int encryption);
typedef int (*cubesql_connect_ssl_t)(csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, char *ssl_certificate_path);
typedef void (*cubesql_disconnect_t)(csqldb *db, int gracefully);
typedef int (*cubesql_execute_t)(csqldb *db, const char *sql);
typedef csqlc* (*cubesql_select_t)(csqldb *db, const char *sql, int unused);
typedef int (*cubesql_commit_t)(csqldb *db);
typedef int (*cubesql_rollback_t)(csqldb *db);
typedef int (*cubesql_bind_t)(csqldb *db, const char *sql, char **colvalue, int *colsize, int *coltype, int ncols);
typedef int (*cubesql_ping_t)(csqldb *db);
typedef void (*cubesql_cancel_t)(csqldb *db);
typedef int (*cubesql_errcode_t)(csqldb *db);
typedef char* (*cubesql_errmsg_t)(csqldb *db);
typedef int64 (*cubesql_changes_t)(csqldb *db);
typedef void (*cubesql_trace_t)(csqldb *db, trace_function trace, void *arg);
typedef csqlvm* (*cubesql_vmprepare_t)(csqldb *db, const char *sql);
typedef int (*cubesql_vmbind_int_t)(csqlvm *vm, int index, int value);
typedef int (*cubesql_vmbind_double_t)(csqlvm *vm, int index, double value);
typedef int (*cubesql_vmbind_text_t)(csqlvm *vm, int index, char *value, int len);
typedef int (*cubesql_vmbind_blob_t)(csqlvm *vm, int index, void *value, int len);
typedef int (*cubesql_vmbind_null_t)(csqlvm *vm, int index);
typedef int (*cubesql_vmbind_int64_t)(csqlvm *vm, int index, int64 value);
typedef int (*cubesql_vmbind_zeroblob_t)(csqlvm *vm, int index, int len);
typedef int (*cubesql_vmexecute_t)(csqlvm *vm);
typedef csqlc* (*cubesql_vmselect_t)(csqlvm *vm);
typedef int (*cubesql_vmclose_t)(csqlvm *vm);
typedef int (*cubesql_cursor_numrows_t)(csqlc *c);
typedef int (*cubesql_cursor_numcolumns_t)(csqlc *c);
typedef int (*cubesql_cursor_currentrow_t)(csqlc *c);
typedef int (*cubesql_cursor_seek_t)(csqlc *c, int index);
typedef int (*cubesql_cursor_iseof_t)(csqlc *c);
typedef int (*cubesql_cursor_columntype_t)(csqlc *c, int index);
typedef char* (*cubesql_cursor_field_t)(csqlc *c, int row, int column, int *len);
typedef int64 (*cubesql_cursor_rowid_t)(csqlc *c, int row);
typedef int64 (*cubesql_cursor_int64_t)(csqlc *c, int row, int column, int64 default_value);
typedef int (*cubesql_cursor_int_t)(csqlc *c, int row, int column, int default_value);
typedef double (*cubesql_cursor_double_t)(csqlc *c, int row, int column, double default_value);
typedef char* (*cubesql_cursor_cstring_t)(csqlc *c, int row, int column);
typedef char* (*cubesql_cursor_cstring_static_t)(csqlc *c, int row, int column, char *static_buffer, int bufferlen);
typedef void (*cubesql_cursor_free_t)(csqlc *c);
// API declarations
class SQLAPI_API cubeSqlAPI : public saAPI
{
public:
cubeSqlAPI();
cubesql_connect_t cubesql_connect;
cubesql_connect_ssl_t cubesql_connect_ssl;
cubesql_disconnect_t cubesql_disconnect;
cubesql_execute_t cubesql_execute;
cubesql_select_t cubesql_select;
cubesql_commit_t cubesql_commit;
cubesql_rollback_t cubesql_rollback;
cubesql_bind_t cubesql_bind;
cubesql_ping_t cubesql_ping;
cubesql_cancel_t cubesql_cancel;
cubesql_errcode_t cubesql_errcode;
cubesql_errmsg_t cubesql_errmsg;
cubesql_changes_t cubesql_changes;
cubesql_trace_t cubesql_trace;
cubesql_vmprepare_t cubesql_vmprepare;
cubesql_vmbind_int_t cubesql_vmbind_int;
cubesql_vmbind_double_t cubesql_vmbind_double;
cubesql_vmbind_text_t cubesql_vmbind_text;
cubesql_vmbind_blob_t cubesql_vmbind_blob;
cubesql_vmbind_null_t cubesql_vmbind_null;
cubesql_vmbind_int64_t cubesql_vmbind_int64;
cubesql_vmbind_zeroblob_t cubesql_vmbind_zeroblob;
cubesql_vmexecute_t cubesql_vmexecute;
cubesql_vmselect_t cubesql_vmselect;
cubesql_vmclose_t cubesql_vmclose;
cubesql_cursor_numrows_t cubesql_cursor_numrows;
cubesql_cursor_numcolumns_t cubesql_cursor_numcolumns;
cubesql_cursor_currentrow_t cubesql_cursor_currentrow;
cubesql_cursor_seek_t cubesql_cursor_seek;
cubesql_cursor_iseof_t cubesql_cursor_iseof;
cubesql_cursor_columntype_t cubesql_cursor_columntype;
cubesql_cursor_field_t cubesql_cursor_field;
cubesql_cursor_rowid_t cubesql_cursor_rowid;
cubesql_cursor_int64_t cubesql_cursor_int64;
cubesql_cursor_int_t cubesql_cursor_int;
cubesql_cursor_double_t cubesql_cursor_double;
cubesql_cursor_cstring_t cubesql_cursor_cstring;
cubesql_cursor_cstring_static_t cubesql_cursor_cstring_static;
cubesql_cursor_free_t cubesql_cursor_free;
};
class SQLAPI_API cubeSqlConnectionHandles : public saConnectionHandles
{
public:
cubeSqlConnectionHandles();
csqldb *pDb;
};
class SQLAPI_API cubeSqlCommandHandles : public saCommandHandles
{
public:
cubeSqlCommandHandles();
csqlvm *pVm;
csqlc *pC;
};
extern cubeSqlAPI g_cubeSqlAPI;
#endif //__CUBESQLAPI_H__

View File

@ -0,0 +1,177 @@
/*
* cubesql.h
*
* This file is the public interface for the cubeSQL Server SDK.
* You just need to include this header file in your projects.
*
* (c) 2006-2011 SQLabs s.r.l. -- All Rights Reserved
* Author: Marco Bambini (MB)
*
*/
#ifndef CUBESQLSDK_H
#define CUBESQLSDK_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef CUBESQL_BUILD_DLL
#define CUBESQL_APIEXPORT __declspec(dllexport)
#else
#define CUBESQL_APIEXPORT
#endif
// custom boolean values
#ifndef kTRUE
#define kTRUE 1
#endif
#ifndef kFALSE
#define kFALSE 0
#endif
// default values
#define kDEFAULT_PORT 4430
#define kDEFAULT_TIMEOUT 12
#define kNOERR 0
#define kERR -1
// client side errors
#define kMEMORY_ERROR -2
#define kPARAMETER_ERROR -3
#define kPROTOCOL_ERROR -4
#define kZLIB_ERROR -5
#define kSSL_ERROR -6
#define kSSL_CERT_ERROR -7
// encryption flags used in cubesql_connect
#define kAESNONE 0
#define kAES128 2
#define kAES192 3
#define kAES256 4
#define kSSL 8
#define kSSL_AES128 kSSL+kAES128
#define kSSL_AES192 kSSL+kAES192
#define kSSL_AES256 kSSL+kAES256
// flag used in cubesql_cursor_getfield
#define kCUBESQL_COLNAME 0
#define kCUBESQL_CURROW -1
#define kCUBESQL_COLTABLE -2
#define kCUBESQL_ROWID -666
// flag used in cubesql_cursor_seek
#define kCUBESQL_SEEKNEXT -2
#define kCUBESQL_SEEKFIRST -3
#define kCUBESQL_SEEKLAST -4
#define kCUBESQL_SEEKPREV -5
// SSL
#define kSSL_LIBRARY_PATH 1
#define kCRYPTO_LIBRARY_PATH 2
#ifndef int64
#ifdef WIN32
typedef __int64 int64;
#else
typedef long long int int64;
#endif
#endif
// column types coming from the server
enum {
TYPE_None = 0,
TYPE_Integer = 1,
TYPE_Float = 2,
TYPE_Text = 3,
TYPE_Blob = 4,
TYPE_Boolean = 5,
TYPE_Date = 6,
TYPE_Time = 7,
TYPE_Timestamp = 8,
TYPE_Currency = 9
};
// column types to specify in the cubesql_bind command (coltype)
#define kBIND_INTEGER 1
#define kBIND_DOUBLE 2
#define kBIND_TEXT 3
#define kBIND_BLOB 4
#define kBIND_NULL 5
#define kBIND_INT64 8
#define kBIND_ZEROBLOB 9
// define opaque datatypes
typedef struct csqldb csqldb;
typedef struct csqlc csqlc;
typedef struct csqlvm csqlvm;
typedef void (*trace_function) (const char*, void*);
// function prototypes
CUBESQL_APIEXPORT int cubesql_connect (csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, int encryption);
CUBESQL_APIEXPORT int cubesql_connect_ssl (csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, char *ssl_certificate_path);
CUBESQL_APIEXPORT void cubesql_disconnect (csqldb *db, int gracefully);
CUBESQL_APIEXPORT int cubesql_execute (csqldb *db, const char *sql);
CUBESQL_APIEXPORT csqlc *cubesql_select (csqldb *db, const char *sql, int unused);
CUBESQL_APIEXPORT int cubesql_commit (csqldb *db);
CUBESQL_APIEXPORT int cubesql_rollback (csqldb *db);
CUBESQL_APIEXPORT int cubesql_bind (csqldb *db, const char *sql, char **colvalue, int *colsize, int *coltype, int ncols);
CUBESQL_APIEXPORT int cubesql_ping (csqldb *db);
CUBESQL_APIEXPORT void cubesql_cancel (csqldb *db);
CUBESQL_APIEXPORT int cubesql_errcode (csqldb *db);
CUBESQL_APIEXPORT char *cubesql_errmsg (csqldb *db);
CUBESQL_APIEXPORT int64 cubesql_changes (csqldb *db);
CUBESQL_APIEXPORT void cubesql_trace (csqldb *db, trace_function trace, void *arg);
CUBESQL_APIEXPORT csqlvm *cubesql_vmprepare (csqldb *db, const char *sql);
CUBESQL_APIEXPORT int cubesql_vmbind_int (csqlvm *vm, int index, int value);
CUBESQL_APIEXPORT int cubesql_vmbind_double (csqlvm *vm, int index, double value);
CUBESQL_APIEXPORT int cubesql_vmbind_text (csqlvm *vm, int index, char *value, int len);
CUBESQL_APIEXPORT int cubesql_vmbind_blob (csqlvm *vm, int index, void *value, int len);
CUBESQL_APIEXPORT int cubesql_vmbind_null (csqlvm *vm, int index);
CUBESQL_APIEXPORT int cubesql_vmbind_int64 (csqlvm *vm, int index, int64 value);
CUBESQL_APIEXPORT int cubesql_vmbind_zeroblob (csqlvm *vm, int index, int len);
CUBESQL_APIEXPORT int cubesql_vmexecute (csqlvm *vm);
CUBESQL_APIEXPORT csqlc *cubesql_vmselect (csqlvm *vm);
CUBESQL_APIEXPORT int cubesql_vmclose (csqlvm *vm);
CUBESQL_APIEXPORT int cubesql_cursor_numrows (csqlc *c);
CUBESQL_APIEXPORT int cubesql_cursor_numcolumns (csqlc *c);
CUBESQL_APIEXPORT int cubesql_cursor_currentrow (csqlc *c);
CUBESQL_APIEXPORT int cubesql_cursor_seek (csqlc *c, int index);
CUBESQL_APIEXPORT int cubesql_cursor_iseof (csqlc *c);
CUBESQL_APIEXPORT int cubesql_cursor_columntype (csqlc *c, int index);
CUBESQL_APIEXPORT char *cubesql_cursor_field (csqlc *c, int row, int column, int *len);
CUBESQL_APIEXPORT int64 cubesql_cursor_rowid (csqlc *c, int row);
CUBESQL_APIEXPORT int64 cubesql_cursor_int64 (csqlc *c, int row, int column, int64 default_value);
CUBESQL_APIEXPORT int cubesql_cursor_int (csqlc *c, int row, int column, int default_value);
CUBESQL_APIEXPORT double cubesql_cursor_double (csqlc *c, int row, int column, double default_value);
CUBESQL_APIEXPORT char *cubesql_cursor_cstring (csqlc *c, int row, int column);
CUBESQL_APIEXPORT char *cubesql_cursor_cstring_static (csqlc *c, int row, int column, char *static_buffer, int bufferlen);
CUBESQL_APIEXPORT void cubesql_cursor_free (csqlc *c);
// private functions
int cubesql_connect_token (csqldb **db, const char *host, int port, const char *username, const char *password,
int timeout, int encryption, char *token, int useOldProtocol, const char *ssl_certificate,
const char *root_certificate, const char *ssl_certificate_password, const char *ssl_chiper_list);
int cubesql_connect_old_protocol (csqldb **db, const char *host, int port, const char *username, const char *password, int timeout, int encryption);
void cubesql_clear_errors (csqldb *db);
csqldb *cubesql_cursor_db (csqlc *cursor);
csqlc *cubesql_cursor_create (csqldb *db, int nrows, int ncolumns, int *types, char **names);
int cubesql_cursor_addrow (csqlc *cursor, char **row, int *len);
int cubesql_cursor_columntypebind (csqlc *c, int index);
void cubesql_setuserptr (csqldb *db, void *userptr);
void *cubesql_getuserptr (csqldb *db);
void cubesql_settoken (csqldb *db, char *token);
void cubesql_sethostverification (csqldb *db, char *hostverification);
char *cubesql_gettoken (csqldb *db);
void cubesql_setpath (int type, char *path);
void cubesql_seterror (csqldb *db, int errcode, char *errmsg);
const char *cubesql_sslversion (void);
#ifdef __cplusplus
} /* End of the 'extern "C"' block */
#endif
#endif

View File

@ -3,35 +3,13 @@
* MODULE: ib_util.h
* DESCRIPTION: Prototype header file for ib_util.c
*
* The contents of this file are subject to the Interbase Public
* License Version 1.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy
* of the License at http://www.Inprise.com/IPL.html
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
* or implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code was created by Inprise Corporation
* and its predecessors. Portions created by Inprise Corporation are
* Copyright (C) Inprise Corporation.
*
* Copyright (C) 1986-2010 Embarcadero Technologies Inc.
* All Rights Reserved.
* Contributor(s): ______________________________________.
*/
#ifndef _IB_UTIL_H
#define _IB_UTIL_H
#ifdef __cplusplus
extern "C" {
#endif
extern void *ib_util_malloc(long);
#ifdef __cplusplus
} /* extern "C" */
#endif
extern void * ib_util_malloc (int);
#endif /* _IB_UTIL_H */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -464,7 +464,23 @@ class SQLAPI_API odbcCommandHandles : public saCommandHandles
public:
odbcCommandHandles();
SQLHSTMT m_hstmt;
SQLHSTMT m_hstmt;
};
class SQLAPI_API odbcExternalConnection
{
bool m_bAttached;
SAConnection *m_pCon;
public:
SQLHENV m_henv;
SQLHDBC m_hdbc;
public:
odbcExternalConnection(SAConnection *pCon, SQLHENV henv, SQLHDBC hdbc);
void Attach();
void Detach();
~odbcExternalConnection();
};
extern odbcAPI g_odbcAPI;

File diff suppressed because it is too large Load Diff

View File

@ -111,14 +111,14 @@ typedef void (*PQprintTuples_t)(const PGresult *res,
typedef int (*lo_open_t)(PGconn *conn, Oid lobjId, int mode);
typedef int (*lo_close_t)(PGconn *conn, int fd);
typedef int (*lo_read_t)(PGconn *conn, int fd, char *buf, size_t len);
typedef int (*lo_write_t)(PGconn *conn, int fd, char *buf, size_t len);
typedef int (*lo_write_t)(PGconn *conn, int fd, const char *buf, size_t len);
typedef int (*lo_lseek_t)(PGconn *conn, int fd, int offset, int whence);
typedef Oid (*lo_creat_t)(PGconn *conn, int mode);
typedef int (*lo_tell_t)(PGconn *conn, int fd);
typedef int (*lo_unlink_t)(PGconn *conn, Oid lobjId);
typedef Oid (*lo_import_t)(PGconn *conn, const char *filename);
typedef int (*lo_export_t)(PGconn *conn, Oid lobjId, const char *filename);
typedef int (*PQmblen_t)(const unsigned char *s, int encoding);
typedef int (*PQmblen_t)(const char *s, int encoding);
typedef int (*PQenv2encoding_t)(void);
// new
@ -137,7 +137,7 @@ typedef unsigned char* (*PQunescapeBytea_t)(const unsigned char *strtext,
/* These forms are deprecated! */
typedef size_t (*PQescapeString_t)(char *to, const char *from, size_t length);
typedef char* (*PQescapeBytea_t)(const unsigned char *from, size_t from_length,
typedef unsigned char* (*PQescapeBytea_t)(const unsigned char *from, size_t from_length,
size_t *to_length);
typedef void (*PQfreemem_t)(void *ptr);
@ -147,8 +147,8 @@ typedef int (*PQputCopyEnd_t)(PGconn *conn, const char *errormsg);
typedef int (*PQgetCopyData_t)(PGconn *conn, char **buffer, int async);
typedef PGPing (*PQping_t)(const char *conninfo);
typedef PGPing (*PQpingParams_t)(const char **keywords,
const char **values, int expand_dbname);
typedef PGPing (*PQpingParams_t)(const char *const * keywords,
const char *const * values, int expand_dbname);
typedef const char* (*pg_encoding_to_char_t)(int encoding);

View File

@ -8,8 +8,7 @@
#include "SQLAPI.h"
// API header(s)
#define SQL_32BITTARG 1
#include <sql.h>
#include <sqlbase.h>
extern long g_nSBDLLVersionLoaded;

View File

@ -115,6 +115,12 @@ typedef void *(*sqlite3_rollback_hook_t)(sqlite3*, void(*)(void *), void*);
typedef int (*sqlite3_enable_shared_cache_t)(int);
typedef int (*sqlite3_release_memory_t)(int);
typedef void (*sqlite3_soft_heap_limit_t)(int);
typedef int(*sqlite3_load_extension_t)(
sqlite3 *db, /* Load the extension into this database connection */
const char *zFile, /* Name of the shared library containing extension */
const char *zProc, /* Entry point. Derived from zFile if 0 */
char **pzErrMsg /* Put error message here if not 0 */
);
typedef int (*sqlite3_enable_load_extension_t)(sqlite3 *db, int onoff);
typedef int (*sqlite3_auto_extension_t)(void *xEntryPoint);
typedef void (*sqlite3_reset_auto_extension_t)(void);
@ -181,6 +187,9 @@ typedef void *(*sqlite3_update_hook_t)(
void*
);
typedef int(*sqlite3_key_t)(sqlite3 *db, const void *pKey, int nKey);
typedef int(*sqlite3_rekey_t)(sqlite3 *db, const void *pKey, int nKey);
// API declarations
class SQLAPI_API sl3API : public saAPI
{
@ -240,7 +249,16 @@ public:
sqlite3_update_hook_t sqlite3_update_hook;
sqlite3_load_extension_t sqlite3_load_extension;
sqlite3_enable_load_extension_t sqlite3_enable_load_extension;
sqlite3_key_t sqlite3_key;
sqlite3_rekey_t sqlite3_rekey;
sqlite3_free_t sqlite3_free;
sqlite3_memory_used_t sqlite3_memory_used;
sqlite3_memory_highwater_t sqlite3_memory_highwater;
};
class SQLAPI_API sl3ConnectionHandles : public saConnectionHandles

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -18,6 +18,8 @@ class ssOleDbAPI : public saAPI
{
public:
ssOleDbAPI();
static bool& ssOleDbAPI::ProcessSQLServerErrorInfo();
};
class SQLAPI_API ssOleDbConnectionHandles : public saConnectionHandles

View File

@ -17,6 +17,7 @@ class SQLAPI_API SASybErrInfo : public SAMutex
{
public:
SASybErrInfo();
virtual ~SASybErrInfo();
public:
CS_MSGNUM msgnumber;

View File

@ -52,7 +52,8 @@ protected:
static bool mese_commerciale (TMask_field& f, KEY k);
static bool fixed_scad (TMask_field& f, KEY k);
static bool tipo_rata (TMask_field& f, KEY k);
static bool ult_class (TMask_field& f, KEY k);
static bool ult_class (TMask_field& f, KEY k);
static bool cond_pagamento (TMask_field& f, KEY k);
void* _app_data;
@ -93,7 +94,8 @@ bool TCond_pag_app::user_create()
_msk->set_handler (F_FIXSCAD_2 , fixed_scad);
_msk->set_handler (F_FIXSCAD_3 , fixed_scad);
_msk->set_handler (F_TIPO_RATA , tipo_rata);
_msk->set_handler (F_ULT_CLASS , ult_class);
_msk->set_handler (F_ULT_CLASS , ult_class);
_msk->set_handler(F_CONDPAGSDI , cond_pagamento);
shuttle._msk = _msk;
shuttle._sht = _cs;
@ -264,7 +266,10 @@ bool TCond_pag_app::numero_rate(TMask_field& f, KEY k)
}
msk->set(F_NUM_RATE,pag->n_rate());
return TRUE;
// Finito tutto chiamo il controllo sul tipo pagamento!
return cond_pagamento(f.mask().field(F_CONDPAGSDI), K_TAB);
}
bool TCond_pag_app::mese_commerciale(TMask_field& f, KEY k)
@ -375,6 +380,44 @@ bool TCond_pag_app::ult_class(TMask_field& f, KEY k)
return TRUE;
}
bool TCond_pag_app::cond_pagamento(TMask_field& f, KEY k)
{
if (!f.to_check(k) || f.mask().query_mode() || !f.mask().get(F_NUM_RATE).full())
return true;
// Controllo se il tipo è coerente con quello segnato prima
int nrate = f.mask().get_int(F_NUM_RATE);
bool err = false;
switch (atoi(f.get().right(1)))
{
// Pagamento a rate
case 1:
if (nrate <= 1)
{
err = true;
f.set("TP02");
}
break;
// Pagamento completo
case 2:
if (nrate > 1)
{
err = true;
f.set("TP01");
}
break;
// Pagamento anticipo
case 3:
// Non so che fare!
break;
}
if(err)
{
warning_box("Impossibile impostare questo tipo di pagamento con %d rate!", nrate);
}
return true;
}
// qui viene il belloccio
bool TCond_pag_app::sheet_action(TSheet_field&, int r, KEY k)
{

View File

@ -3,20 +3,21 @@
#define TAB_CPG "%CPG"
#define TAB_RPG "%RPG"
#define F_CODICE 201
#define F_DESC 202
#define F_SHEET_RPG 203
#define F_INIZIOSCAD 204
#define F_MESECOMM 205
#define F_TIPO_PRIMA_RATA 206
#define F_RATE_DIFF 208
#define F_INT_RATE 209
#define F_NUM_RATE 210
#define F_TIPO_RATA 211
#define F_EQUAL_FROM 212
#define F_START_RATA 213
#define F_ULT_CLASS 214
#define F_FIXSCAD_1 215
#define F_FIXSCAD_2 216
#define F_FIXSCAD_3 217
#define F_CODICE 201
#define F_CONDPAGSDI 202
#define F_DESC 203
#define F_SHEET_RPG 204
#define F_INIZIOSCAD 205
#define F_MESECOMM 206
#define F_TIPO_PRIMA_RATA 207
#define F_RATE_DIFF 208
#define F_INT_RATE 209
#define F_NUM_RATE 210
#define F_TIPO_RATA 211
#define F_EQUAL_FROM 212
#define F_START_RATA 213
#define F_ULT_CLASS 214
#define F_FIXSCAD_1 215
#define F_FIXSCAD_2 216
#define F_FIXSCAD_3 217

View File

@ -36,6 +36,15 @@ BEGIN
KEY 1
END
LIST F_CONDPAGSDI 4 20
BEGIN
PROMPT 20 1 "Tipo di pagamento "
FIELD S12
ITEM "TP01|TP01 A rate"
ITEM "TP02|TP02 Completo"
ITEM "TP03|TP03 Anticipo"
END
STRING F_DESC 50
BEGIN
PROMPT 2 2 "Descrizione "

View File

@ -1,3 +1,4 @@
#define F_CODICERATA 101
#define F_CODICEALFA 102
#define F_DESCR 103
#define F_CODICERATA 101
#define F_CODICEALFA 102
#define F_MODPAG 103
#define F_DESCR 104

View File

@ -50,6 +50,38 @@ BEGIN
CHECKTYPE REQUIRED
END
STRING F_MODPAG 4
BEGIN
PROMPT 20 4 "Tipo pagamento "
SHEET "Codice|Tipo pagamento@32"
INPUT S_MODPAG
OUTPUT S_MODPAG
CHECKTYPE REQUIRED
FIELD S12
ITEM "MP01|contanti"
ITEM "MP02|assegno"
ITEM "MP03|assegno circolare"
ITEM "MP04|contanti presso Tesoreria"
ITEM "MP05|bonifico"
ITEM "MP06|vaglia cambiario"
ITEM "MP07|bollettino bancario"
ITEM "MP08|carta di pagamento"
ITEM "MP09|RID"
ITEM "MP10|RID utenze"
ITEM "MP11|RID veloce"
ITEM "MP12|RIBA"
ITEM "MP13|MAV"
ITEM "MP14|quietanza erario"
ITEM "MP15|giroconto su conti di contabilità speciale"
ITEM "MP16|domiciliazione bancaria"
ITEM "MP17|domiciliazione postale"
ITEM "MP18|bollettino di c/c postale"
ITEM "MP19|SEPA Direct Debit"
ITEM "MP20|SEPA Direct Debit CORE"
ITEM "MP21|SEPA Direct Debit B2B"
ITEM "MP22|Trattenuta su somme già riscosse"
END
STRING F_DESCR 50
BEGIN
PROMPT 2 6 "Descrizione "

View File

@ -85,6 +85,8 @@ protected:
static bool rfso_handler(TMask_field& f, KEY k);
// Handler Stato
static bool stato_handler(TMask_field& f, KEY k);
// Handler codice destinatario per Fatturazione PA/FP
static bool coddest_handler(TMask_field& f, KEY k);
public:
virtual bool get_next_key(TToken_string& key);
@ -575,6 +577,18 @@ bool TClifo_application::stato_handler(TMask_field& f, KEY k)
return true;
}
bool TClifo_application::coddest_handler(TMask_field& f, KEY k)
{
// Controllo che il codice immesso sia di 6/7 cifre in base al clifo
if(f.focusdirty() && !f.empty() &&
((f.mask().get_int(F_ALLEG) == 7 && f.get().size() != 6) || // P.A.
(f.mask().get_int(F_ALLEG) != 7 && f.get().size() != 7))) // Privato
{
warning_box("Lunghezza codice destinatario incoerente");
}
return true;
}
HIDDEN bool alleg_handler(TMask_field& f, KEY key)
{
if (f.to_check(key, true))
@ -1561,6 +1575,7 @@ bool TClifo_application::user_create() // initvar e arrmask
_msk->set_handler(DLG_CONTRLAV, contrlav_handler);
_msk->set_handler(LST_TIPO_RFSO, rfso_handler);
_msk->set_handler(F_STATOCF, stato_handler);
_msk->set_handler(F_PADESTIN, coddest_handler);
TSheet_field& ind = _msk->sfield(F_SHEET_G_VEN);
ind.set_notify(indsp_notify);

View File

@ -176,6 +176,7 @@
#define DLG_OGGETTI 304
#define F_BYMAIL 306
#define F_DOCMAIL 307
#define F_PEC 324
#define DLG_ANAG 308
#define DLG_CONTRLAV 309
#define F_BANA 310

View File

@ -519,7 +519,7 @@ END
GROUPBOX DLG_NULL 76 10
BEGIN
PROMPT 1 4 "Numeri telefonici"
PROMPT 1 4 "Contatti"
END
STRING F_PTEL 5
@ -590,33 +590,39 @@ BEGIN
HELP "Numero telefonico del fax"
END
STRING F_MAIL 50 48
BEGIN
PROMPT 2 8 "E-mail "
FIELD MAIL
END
BUTTON DLG_EMAIL 10 2
BEGIN
PROMPT 62 8 "~Posta"
PICTURE BMP_EMAIL
END
BOOLEAN F_BYMAIL
BEGIN
PROMPT 2 9 "Consenso spedizione documenti per posta elettronica"
PROMPT 40 7 "Consenso spedizione doc tramite email"
FIELD BYMAIL
MESSAGE FALSE CLEAR,F_DOCMAIL
MESSAGE TRUE ENABLE,F_DOCMAIL
END
STRING F_DOCMAIL 50
STRING F_MAIL 50 23
BEGIN
PROMPT 2 10 "Indirizzo doc."
PROMPT 2 8 "E-Mail "
FIELD MAIL
END
STRING F_DOCMAIL 50 20
BEGIN
PROMPT 40 8 "E-Mail doc"
FIELD DOCMAIL
CHECKTYPE REQUIRED
END
STRING F_PEC 50 23
BEGIN
PROMPT 2 9 "Pec "
FIELD PEC
END
BUTTON DLG_EMAIL 10 2
BEGIN
PROMPT 62 9 "~Posta"
PICTURE BMP_EMAIL
END
BOOLEAN F_SPEDPRI
BEGIN
PROMPT 2 11 "Informativa Privacy spedita"

View File

@ -1495,6 +1495,7 @@ bool TPagamento::read(TTable* t, TTable* r)
_fixd[1] = t->get_int("I1");
_fixd[2] = t->get_int("I2");
_int_rate = t->get_int("I3");
_cond_pag = t->get("S12");
// aggiusta _inizio secondo INSCAD; vedi mese commerciale etc.
if (_inscad == 'M')

View File

@ -65,7 +65,8 @@ class TPagamento : public TObject
int _fixd[3]; // giorni scadenza fissa, se desiderati
int _roundlit; // decimali arrotondamento importo in lire (sempre 0 per ora)
int _roundval; // decimali arrotondamento importo in valuta
int _int_rate;
int _int_rate;
TString _cond_pag; // Condizione di pagamento per SDI, valori ammessi: TP01/02/03
int _rata_ifield(int n, int f) const;
long _rata_lfield(int n, int f) const;
@ -148,6 +149,7 @@ public:
const TString& code() const { return _code; }
const char* desc_tpr() const;
const char* desc_tipo(int tipo, char ulc, bool* ok = NULL) const;
const TString& cond_pag_sdi() const { return _cond_pag; }
// giorni scadenza fissi, aggiunti poi
void set_fixed_scad(int a, int ind) { _fixd[ind] = a; }

View File

@ -1,3 +1,3 @@
17
0
$cfven|4604|4604|510|0|Clienti/Fornitori per vendite|||
$cfven|4612|4613|511|0|Clienti/Fornitori per vendite|||

View File

@ -79,7 +79,7 @@ CODCAUSNC|1|3|0|Causale Contabile per le Note di Credito
CODCAUSINC|1|3|0|Causale Contabile per gli Incassi
RIFDOC|8|1|0|Riferimenti sui documenti
IMPMINFAT|4|18|3|Importo minimo Fatture
PADESTIN|1|6|0|Codice ufficio amministrazione
PADESTIN|1|7|0|Codice ufficio amministrazione
PARIFAMM|1|20|0|Codice riferimento amministrativo
PRODCONAI|1|6|0|Produttore CONAI[6]: acc,all,car,pla,leg,vet
1

View File

@ -1,3 +1,3 @@
20
0
$clifo|0|0|825|0|Clienti/Fornitori|||
$clifo|774|774|875|0|Clienti/Fornitori|||

View File

@ -1,5 +1,5 @@
20
67
68
TIPOCF|1|1|0|Tipo <C>liente <F>ornitore
CODCF|3|6|0|Codice
RAGSOC|1|50|0|Ragione sociale
@ -34,6 +34,7 @@ PTELEX|1|10|0|Prefisso del numero di TELEX
TELEX|1|30|0|Prefisso del numero di TELEX
MAIL|1|50|0|Indirizzo di posta elettronica generico
BYMAIL|8|1|0|Consenso all' invio dei documenti per posta elettronica
PEC|1|50|0|Indirizzo di posta elettronica certificato
DOCMAIL|1|50|0|Indirizzo di posta elettronica per i documenti
DATANASC|5|8|0|Data di nascita
STATONASC|2|3|0|Codice stato di nascita

17
src/fp/fp0.cpp Normal file
View File

@ -0,0 +1,17 @@
#include <xvt.h>
#include "fp0.h"
int main(int argc, char** argv)
{
int rt = -1;
const int r = (argc > 1) ? atoi( &argv[1][1] ) : 1;
switch (r)
{
case 2: rt = fp0300(argc, argv); break; // Gestione fatture attive (PAA, Ex Fattura PA)
//case 1: rt = fp0200(argc, argv); break; // Gestione fatture passive (PAF)
default: rt = fp0100(argc, argv); break; // Configurazione
}
return rt;
}

8
src/fp/fp0.h Normal file
View File

@ -0,0 +1,8 @@
#ifndef __TF0_H
#define __TF0_H
int fp0100(int argc, char* argv[]);
int fp0200(int argc, char* argv[]);
int fp0300(int argc, char* argv[]);
#endif

126
src/fp/fp0100.cpp Normal file
View File

@ -0,0 +1,126 @@
#include <confapp.h>
#include <automask.h>
#include <sheet.h>
#include <utility.h>
#include "fp0.h"
#include "fp0100a.h"
#include <tsdb.h>
#include "recset.h"
#include "progind.h"
#include "../ve/velib.h"
class TParametri_mask : public TAutomask
{
protected:
void tipi_import();
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TParametri_mask(const char* n);
};
TParametri_mask::TParametri_mask(const char * n) : TAutomask(n)
{
set(F_INDIRIZZO, ini_get_string(CONFIG_DITTA, "fp", "ip"));
set(F_DATABASE, ini_get_string(CONFIG_DITTA, "fp", "db"));
set(F_USER, ini_get_string(CONFIG_DITTA, "fp", "usr"));
set(F_PASSWORD, decode(ini_get_string(CONFIG_DITTA, "fp", "psw") ));
set(F_FLDDEST, ini_get_string(CONFIG_DITTA, "fp", "flddest"));
set(F_FLDUSRDEST, ini_get_string(CONFIG_DITTA, "fp", "fldusrdest"));
}
void TParametri_mask::tipi_import()
{
if(yesno_box("Attenzione! Questa procedura riporterà su tutti i documenti il tipo documento SDI della configurazione!\nEventuali modifiche già fatte verranno sovrascritte, continuare?"))
{
TISAM_recordset tipi("USE %TIP SELECT S12!=''");
TProgress_monitor p(tipi.items(), "Elaborazione tipi doc");
for(bool ok = tipi.move_first(); ok; ok = tipi.move_next())
{
if (!p.add_status())
break;
TISAM_recordset docs("USE DOC SELECT TIPODOC==#TIPODOC");
docs.set_var("#TIPODOC", tipi.get("CODTAB"));
TString msg = "Elaborazione documenti "; msg << tipi.get("CODTAB");
TProgress_monitor d(docs.items(), msg);
for (bool ok = docs.move_first(); ok; ok = docs.move_next())
{
if (!d.add_status())
break;
TDocumento doc(docs.cursor()->curr());
doc.put("TIPODOCSDI", tipi.get("S12").as_string());
if (doc.rewrite() != NOERR)
fatal_box("ERRORE aggiornamento documenti");
}
}
}
}
bool TParametri_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_ELABORA:
if (e == fe_button)
tipi_import();
default:
break;
}
return true;
}
class TParametri_ditta : public TSkeleton_application
{
public:
virtual bool create();
virtual void main_loop();
};
bool TParametri_ditta::create()
{
open_files(LF_DOC, LF_RIGHEDOC, -1);
return TSkeleton_application::create();
}
void TParametri_ditta::main_loop()
{
TParametri_mask pm("fp0100a");
while (pm.run() == K_ENTER)
{
// Testo prima la connessione
TString
ip = pm.get(F_INDIRIZZO),
db = pm.get(F_DATABASE),
ad,
usr = pm.get(F_USER),
psw = pm.get(F_PASSWORD);
ad << ip << "@" << db;
SSimple_query s(ad, usr, psw, TSDB_MSSQL);
if (s.sq_is_connect())
{
ini_set_string(CONFIG_DITTA, "fp", "ip", ip);
ini_set_string(CONFIG_DITTA, "fp", "db", db);
ini_set_string(CONFIG_DITTA, "fp", "usr", usr);
ini_set_string(CONFIG_DITTA, "fp", "psw", encode(psw));
ini_set_string(CONFIG_DITTA, "fp", "flddest", pm.get(F_FLDDEST));
ini_set_string(CONFIG_DITTA, "fp", "fldusrdest", pm.get(F_FLDUSRDEST));
message_box("Dati salvati correttamente!");
}
else
error_box("Connessione a database non riuscita!");
}
}
int fp0100(int argc, char* argv[])
{
TParametri_ditta appc;
appc.run(argc, argv, TR("Configurazione FP"));
return 0;
}

6
src/fp/fp0100a.h Normal file
View File

@ -0,0 +1,6 @@
#define F_INDIRIZZO 104
#define F_DATABASE 101
#define F_USER 102
#define F_PASSWORD 103
#define F_FLDDEST 104
#define F_FLDUSRDEST 105

64
src/fp/fp0100a.uml Normal file
View File

@ -0,0 +1,64 @@
#include "fp0100a.h"
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
BUTTON DLG_ELABORA 2 2
BEGIN
PROMPT 1 1 "Imp. Tipi Doc"
PICTURE TOOL_ELABORA
END
ENDPAGE
PAGE "Configurazione FP" 0 2 0 0
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 1 "@BDatabase"
END
STRING F_INDIRIZZO 50
BEGIN
PROMPT 2 2 "Indirizzo "
FLAGS ""
CHECKTYPE REQUIRED
END
STRING F_DATABASE 15
BEGIN
PROMPT 2 3 "Nome "
FLAGS ""
CHECKTYPE REQUIRED
END
STRING F_USER 15
BEGIN
PROMPT 2 4 "Utente "
FLAGS ""
CHECKTYPE REQUIRED
END
STRING F_PASSWORD 15
BEGIN
PROMPT 2 5 "Password "
FLAGS "*"
CHECKTYPE REQUIRED
END
STRING F_FLDDEST 50
BEGIN
PROMPT 2 6 "Destinazione Server "
FLAGS ""
CHECKTYPE REQUIRED
END
STRING F_FLDUSRDEST 50
BEGIN
PROMPT 2 7 "Destinazione User "
FLAGS ""
END
ENDPAGE
ENDMASK

1757
src/fp/fp0200.cpp Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

0
src/fp/fp0200a.h Normal file
View File

467
src/fp/fp0200a.uml Normal file
View File

@ -0,0 +1,467 @@
#include "fp0200a.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_RECALC 2 2
BEGIN
PROMPT 1 1 "Carica"
PICTURE TOOL_CONVERT
END
BUTTON DLG_ARCHIVE 2 2
BEGIN
PROMPT 2 1 "Controlla"
PICTURE TOOL_SMILE
END
BUTTON DLG_SAVEREC 2 2
BEGIN
PROMPT 3 1 "Salva"
PICTURE TOOL_SAVEREC
END
BUTTON DLG_EDIT 10 2
BEGIN
PROMPT 3 1 "E~xcel"
PICTURE TOOL_EXCEL
END
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 "Esporta"
PICTURE TOOL_ELABORA
END
BUTTON DLG_EMAIL 2 2
BEGIN
PROMPT 1 1 "Crea XML"
PICTURE TOOL_EMAIL
END
#include <helpbar.h>
ENDPAGE
PAGE "Impostazioni" 0 2 0 0
DATE F_DATAINI
BEGIN
PROMPT 1 1 "Data iniziale:"
CHECKTYPE REQUIRED
VALIDATE DATE_CMP_FUNC <= F_DATAFIN
WARNING "La data iniziale non può essere maggiore della data finale"
END
DATE F_DATAFIN
BEGIN
PROMPT 40 1 "Data Finale: "
CHECKTYPE REQUIRED
VALIDATE DATE_CMP_FUNC >= F_DATAINI
WARNING "La data finale non può essere minore della data iniziale"
END
RADIOBUTTON F_TIPOCF 15
BEGIN
PROMPT 1 2 "Tipo C/F"
ITEM "C|Cliente"
ITEM "F|Fornitore"
END
NUMBER F_CODCF 6
BEGIN
PROMPT 18 3 "Codice:"
USE LF_CLIFO
INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_CODCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Occasionale@C" OCCAS
DISPLAY "Codice Fiscale@16" COFI
DISPLAY "Partita IVA@15" PAIV
OUTPUT F_CODCF CODCF
OUTPUT F_RAGSOC RAGSOC
CHEKTYPE NORMAL
GROUP 1
FLAGS ""
END
STRING F_RAGSOC 50 49
BEGIN
PROMPT 18 4 "R.Soc: "
USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF SELECT
INPUT RAGSOC F_RAGSOC
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Codice" CODCF
DISPLAY "Codice Fiscale@16" COFI
DISPLAY "Partita IVA@15" PAIV
COPY OUTPUT F_CODCF
ADD RUN CG0 -1
GROUP 1
FLAGS ""
END
RADIOBUTTON F_FATTSEL 25
BEGIN
PROMPT 1 6 "Fatture da visualizzare"
ITEM "0|Da inviare"
ITEM "1|Inviate"
ITEM "2|Mai elaborati"
ITEM "3|Forzate"
ITEM "4|Errate"
ITEM "5|Disabilitate"
ITEM "6|Tutti"
END
GROUPBOX DLG_NULL 65 5
BEGIN
PROMPT 30 6 "Tipi documento selezionati"
END
BOOLEAN B_TIPO_AUTOFATT
BEGIN
PROMPT 31 7 "Autofattura"
FLAGS ""
END
BOOLEAN B_TIPO_FATTACQ
BEGIN
PROMPT 45 7 "Fatt d'Acq"
FLAGS ""
END
BOOLEAN B_TIPO_FATTFISC
BEGIN
PROMPT 60 7 "Fatt Fisc"
FLAGS ""
END
BOOLEAN B_TIPO_FATTVEN
BEGIN
PROMPT 75 7 "Fatt Ven"
FLAGS ""
END
BOOLEAN B_TIPO_FATTSCO
BEGIN
PROMPT 31 8 "Fatt Scontr"
FLAGS ""
END
BOOLEAN B_TIPO_NOTC
BEGIN
PROMPT 45 8 "Nota Cred"
FLAGS ""
END
BOOLEAN B_TIPO_NOTD
BEGIN
PROMPT 60 8 "Nota Deb"
FLAGS ""
END
BOOLEAN B_TIPO_BOLLADOG
BEGIN
PROMPT 75 8 "Bolla Dog"
FLAGS ""
END
BOOLEAN B_TIPO_STORDOC
BEGIN
PROMPT 31 9 "Storno Doc"
FLAGS ""
END
ENDPAGE
PAGE "Trasferimento Fatture" 0 2 0 0
SPREADSHEET F_RIGHE
BEGIN
PROMPT 0 0 "Righe movimenti"
ITEM "Data\n Reg.@8F"
ITEM "Tipo\nDocum.@2F"
ITEM "Tipo\nDoc. AE.@5F"
ITEM "Numero\nDocum.@5F"
ITEM "Data\nDocum.@10"
ITEM "Aliquota@4"
ITEM "Imponibile@10"
ITEM "Imposta@10"
ITEM "Natura\nIVA@4"
ITEM "% Detr.@6"
ITEM "C/F@2"
ITEM "Codice@6"
ITEM "Occas.@16"
ITEM "Ragione Sociale@35"
ITEM "RF/SO@16"
ITEM "Rag. Soc. RF/SO@35"
ITEM "Partita IVA@11"
ITEM "Codice Fiscale@15"
ITEM "Rev.\nCharge@4"
ITEM "Auto\nfatt.@3"
ITEM "Spedita@5"
ITEM "Inviare@5"
ITEM "Modificata@10"
ITEM "N.\nRegistraz.@10"
ITEM "Codici Errori@10"
END
ENDPAGE
ENDMASK
PAGE "Riga" -1 -1 69 14
BOOLEAN A_SPEDITA
BEGIN
PROMPT 52 10 "Gia' spedita"
FIELD SPEDITA
FLAGS "D"
END
LIST A_INVIO 1 15
BEGIN
PROMPT 1 10 "Da inviare"
ITEM "X|X, Da Inviare"
ITEM "I|I, Inviato"
ITEM "N|N, Disabilitato"
ITEM "F|F, Forzato"
ITEM "E|E, Errato"
FIELD INVIO
END
BOOLEAN A_FORZATA
BEGIN
PROMPT 30 10 "Forzatura manuale"
FIELD FORZATURA
END
NUMBER A_NUMERO 10
BEGIN
PROMPT 1 0 "N.Movimento"
FLAGS "D"
FIELD PROGR
END
DATE A_DATAREG
BEGIN
PROMPT 26 0 "Data reg."
FIELD DATAREG
CHEKTYPE REQUIRED
END
LIST A_TIPOCF 1 10
BEGIN
PROMPT 1 1 "Tipo C/F "
ITEM "C|Cliente"
ITEM "F|Fornitore"
FIELD TIPOCF
FLAGS "D"
END
NUMBER A_CODCF 6
BEGIN
PROMPT 26 1 "Cod. C/F"
USE LF_CLIFO
INPUT TIPOCF A_TIPOCF SELECT
INPUT CODCF A_CODCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Occasionale@C" OCCAS
DISPLAY "Partita IVA" PAIV
DISPLAY "Codice fiscale@16" COFI
OUTPUT A_CODCF CODCF
OUTPUT A_RAGSOC RAGSOC
OUTPUT A_PAIV PAIV
OUTPUT A_COFI COFI
ADD RUN cg0 -1
FIELD CODCF
END
STRING A_OCFPI 16
BEGIN
PROMPT 44 1 "Occas."
USE LF_OCCAS
INPUT CFPI A_OCFPI
DISPLAY "Codice@16" CFPI
DISPLAY "Ragione Sociale@50" RAGSOC
DISPLAY "Partita IVA" PAIV
DISPLAY "Codice fiscale@16" COFI
OUTPUT A_OCFPI CFPI
OUTPUT A_RAGSOC RAGSOC
OUTPUT A_PAIV PAIV
OUTPUT A_COFI COFI
CHEKTYPE NORMAL
GROUP 3
ADD RUN cg0 -6
FIELD OCFPI
END
STRING A_RAGSOC 50 47
BEGIN
FIELD RAGSOC
PROMPT 1 2 "Ragione Sociale"
FLAGS "D"
END
STRING A_RFSO 6
BEGIN
FIELD RFSO
PROMPT 1 4 "Codice RF/SO: "
HELP "Codice Rappresentante Fiscale o Stabile Organizzazione"
FLAGS "D"
END
STRING A_RAGSOCRFSO 50 47
BEGIN
FIELD RAGSOCRFSO
PROMPT 1 5 "Rag. Soc. RF/SO"
HELP "Ragione Sociale RF/SO"
FLAGS "D"
END
STRING A_TIPODOC 2
BEGIN
PROMPT 23 6 "Tipo doc. "
FIELD TIPODOC
USE %TPD
INPUT CODTAB A_TIPODOC
DISPLAY "Tipo " CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT A_TIPODOC CODTAB
WARNING "Tipo documento errato"
CHECKTYPE REQUIRED
FLAGS "HUD"
ADD NONE
END
LIST A_TIPODOCAE 6
BEGIN
PROMPT 23 6 "Tipo doc. "
ITEM "TD01|TD01"
ITEM "TD04|TD04"
ITEM "TD05|TD05"
ITEM "TD07|TD07"
ITEM "TD08|TD08"
ITEM "TD10|TD10"
ITEM "TD11|TD11"
ITEM "ERR0|Errore"
END
STRING A_NUMDOC 7
BEGIN
PROMPT 42 6 "Num. doc. "
FLAGS "U"
FIELD NUMDOC
CHEKTYPE REQUIRED
END
DATE A_DATADOC
BEGIN
PROMPT 1 6 "Data doc."
FIELD DATADOC
CHEKTYPE REQUIRED
END
LIST A_NATURA 1 35
BEGIN
PROMPT 20 7 "Natura IVA"
ITEM "|IVA ordinaria"
ITEM "N1|N1 - IVA esclusa ex art 15"
ITEM "N2|N2 - IVA non soggetta"
ITEM "N3|N3 - IVA non imponibile"
ITEM "N4|N4 - IVA esente"
ITEM "N5|N5 - IVA in regime del margine"
ITEM "N6|N6 - IVA in reverse charge"
ITEM "N7|N7 - IVA assolta in altro stato U3"
END
STRING A_ALIQUOTA 4
BEGIN
PROMPT 1 7 "Aliquota "
HELP "Codice aliquota"
FIELD CODTAB
KEY 1
USE %IVA
FLAGS "U"
INPUT CODTAB A_ALIQUOTA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo" S1
DISPLAY "%@5" R0
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
OUTPUT A_ALIQUOTA CODTAB
CHECKTYPE REQUIRED
VALIDATE ZEROFILL_FUNC 2
END
STRING A_DETRAIB 6
BEGIN
PROMPT 1 8 "% Detraibilita'"
HELP "Percentuale di detraibilita'"
FLAGS "D"
END
NUMBER A_IMPONIBILE 12 2
BEGIN
PROMPT 42 8 "Imponibile"
END
NUMBER A_IMPOSTA 12 2
BEGIN
PROMPT 42 9 "Imposta "
END
BOOLEAN A_REVERSE
BEGIN
PROMPT 1 9 "Reverse charge"
END
BOOLEAN A_AUTOFATT
BEGIN
PROMPT 25 9 "Autofattura"
FLAGS "D"
END
STRING A_PAIV 12
BEGIN
PROMPT 1 3 "Partita IVA "
FLAGS "D"
END
STRING A_COFI 16
BEGIN
PROMPT 33 3 "Codice Fiscale"
FLAGS "D"
END
STRING A_CODERR 10
BEGIN
PROMPT 0 13 "Codici errori"
//FLAGS "D"
END
ENDPAGE
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_USER 2 2
BEGIN
PROMPT 2 1 "Collega"
PICTURE TOOL_LINK
END
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 2 1 "Elimina"
PICTURE TOOL_DELREC
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 4 1 ""
END
ENDPAGE
ENDMASK

308
src/fp/fp0200b.h Normal file
View File

@ -0,0 +1,308 @@
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <execp.h>
#include <golem.h>
#include <progind.h>
#include <reputils.h>
#include <tabutil.h>
#include <utility.h>
#include <agasys.h>
#include <printer.h>
#include <dongle.h> // dongle()
#include <odbcrset.h> // Oracle Recset
#include <tsdb.h>
#include <xvtdb.h>
#include <map> // std::map
#include "../ve/velib05.h"
#include "../cg/cglib03.h"
#include "../fe/felib.h"
#include "fp0200a.h"
#include "../tf/tfutility.h"
#include <memory>
#ifdef DISABLED
/////////////////////////////////////////////////////////////////////////////////////
// Globals
/////////////////////////////////////////////////////////////////////////////////////
enum return_code
{
found, // Trovato
foundcust, // Trovato in trasfatt
foundidcust,// Trovato ma con id customizzato
nextmov, // Trovato ma cambiato movimento
eof, // EOF rmoviva
eofcust, // EOF trasfatt
after // File mov su un movimento dopo rispetto a rmoviva
};
// Su DB: X o ''->Da inviare, F->Forzato, I->Inviato, N->Non inviare
enum filter_fatt
{
toSend, // "", "X", "F", "E"
sent, // "I"
untouched, // "", "X"
forced, // "F"
disabled, // "N"
err, // "E"
all // Nessun controllo
};
#define SHEET_GAP 101
#define DTE_PROVV "DTE0000001"
#define DTR_PROVV "DTR0000001"
#define TOLLARANZA 0.05
// Flag invio
#define FLAG_INVIO "X"
#define FLAG_ERRORE "E"
#define FLAG_NINVIO "N"
#define FLAG_FORZATO "F"
#define FLAG_INVIATO "I"
#define SPESOMETROBASE "ModuliSirio"
#define REG_ATT 1
#define REG_PAS 2
#define CARATTERI_SPECIALI "àèéìòù°"
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
* per avere l'inserimento nello sheet corretto */
enum spesometroFields{
_spedita = A_SPEDITA - SHEET_GAP,
_invio = A_INVIO - SHEET_GAP,
_forzata = A_FORZATA - SHEET_GAP,
_numero = A_NUMERO - SHEET_GAP,
_datareg = A_DATAREG - SHEET_GAP,
_tipocf = A_TIPOCF - SHEET_GAP,
_codcf = A_CODCF - SHEET_GAP,
_occas = A_OCFPI - SHEET_GAP,
_ragsoc = A_RAGSOC - SHEET_GAP,
_rfso = A_RFSO - SHEET_GAP,
_ragsocrfso = A_RAGSOCRFSO - SHEET_GAP,
_codnum = A_TIPODOC - SHEET_GAP,
_codnumAE = A_TIPODOCAE - SHEET_GAP,
_numdoc = A_NUMDOC - SHEET_GAP,
_datadoc = A_DATADOC - SHEET_GAP,
_natura = A_NATURA - SHEET_GAP,
_aliquota = A_ALIQUOTA - SHEET_GAP,
_detraibile = A_DETRAIB - SHEET_GAP,
_imponibile = A_IMPONIBILE - SHEET_GAP,
_importoIVA = A_IMPOSTA - SHEET_GAP, // Imposta è già preso
_reverse = A_REVERSE - SHEET_GAP,
_autofatt = A_AUTOFATT - SHEET_GAP,
_paiv = A_PAIV - SHEET_GAP,
_codfis = A_COFI - SHEET_GAP,
_coderr = A_CODERR - SHEET_GAP
};
/////////////////////////////////////////////////////////////////////////////////////
// Utilities
/////////////////////////////////////////////////////////////////////////////////////
// Da un id ritorna il tipo doc corrispondente
TString getTipoDoc(int id);
int getTipoDoc(TString id);
// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h)
static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str);
// Aggiorna il file dst se più vecchio di src (Potrebbe diventare una funzione di XVT.h)
bool xvt_fsys_fupdate(const char* src, const char* dst);
// Decodifica il tipo di documento per il trasferimento fatture
const char * decodTipo(TToken_string* strarr);
// Salvo un singolo record
//bool saveRec(TToken_string row, bool esportato = false);
// Ritorno una data in formato ANSI
inline TDate toDate(const char * date) { return TDate(date).string(); }
// Salto se la riga non è abilitata
#define IF_IS_ENABLED(strarr) if(strcmp(strarr->get(_invio), FLAG_INVIO) != 0 && strcmp(strarr->get(_invio), FLAG_FORZATO) != 0 && strcmp(strarr->get(_invio), FLAG_INVIATO) != 0) continue;
// Ritorno il carattere senza accento maiuscolo
inline const char * noSpecial(char a);
// Ritorno se è ancora valida la bolla doganale senza informazioni fornitore
bool bd2017();
/////////////////////////////////////////////////////////////////////////////////////
// TFp_record
/////////////////////////////////////////////////////////////////////////////////////
// Connessione a db
SSimple_query& db()
{
SSimple_query * _db = nullptr;
if (_db == nullptr)
_db = new SSimple_query();
return *_db;
}
// Contenitore di campi di un record di database MSSQL
class TFp_record : public TObject
{
TString8 _table;
TToken_string _key;
TAssoc_array _fields;
protected:
void copy(const TFp_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; }
const TString& var2str(const TString& fld, const TVariant& var) const;
public:
void reset() { _fields.destroy(); }
void set(const char* fld, const TVariant& var);
void set(const char* fld, long var);
void set(const char* fld, const char* var);
void set(const char* fld, const real& var);
void set(const char* fld, const TString& var);
void set(const char* fld, const TDate& var);
void set(const char* fld, bool var);
const TVariant& get(const char* fld) const;
bool insert();
bool remove();
bool search();
bool search(const char* k1, const char* k2 = NULL, const char* k3 = NULL);
virtual TObject* dup() const { return new TFp_record(*this); }
virtual bool ok() const { return _table.not_empty(); }
TFp_record& operator=(const TFp_record& rec) { copy(rec); return *this; }
TFp_record(const TFp_record& rec) { copy(rec); }
TFp_record(const char* table);
};
/////////////////////////////////////////////////////////////////////////////////////
// TFp_cursors
/////////////////////////////////////////////////////////////////////////////////////
/*
* Classe per la gestione di RMOVIVA, MOV, TFCUST
*/
class TFp_cursors : TObject
{
friend class TCursor;
TISAM_recordset* c_rmoviva;
TISAM_recordset* c_trasfatt;
bool _newMov;
bool _newCust;
// Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string
TToken_string _alqCust;
TRectype _next(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento
TRectype _nextCust(return_code& code, TString& tipocf, TString& codcf, TString& ocfpi); // Si sposta avanti di un elemento tra quelli custom
bool checkEnabled(TISAM_recordset* origCur);
public:
//TFp_cursors();
~TFp_cursors();
long int getIvaItems() { return c_rmoviva->items(); }
long int getIvaPos() { return c_rmoviva->cursor()->pos(); }
TRectype getIva() { return c_rmoviva->cursor()->curr(); }
int next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf, TString& ocfpi); // Legge tutto il prossimo movimento, in importi mette per ogni codiva la somma
int updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod = toSend);
};
/////////////////////////////////////////////////////////////////////////////////////
// TFp_mask
/////////////////////////////////////////////////////////////////////////////////////
class TFp_mask : public TAutomask
{
friend class TFp_cursors;
TMaskmode _mode;
bool _sheet_dirty;
bool _filter_changed;
protected:
virtual void next_page(int p);
TRecnotype nuovo_progr() const;
void changeInvio(TString tipocf, TString codcf, TString numdoc, TString invio) const;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void openJava();
public:
void setFilterChanged() { _filter_changed = true; }
void load_sheet();
TFp_mask(TString msk);
~TFp_mask();
// Carico i tipi documento all'inizio
void loadConfig();
// Salvo i tipi documento
void saveConfig();
// Salvo tutti i records
bool saveAll();
// Controllo tutti i records
bool checkAll();
// Testo validità record
bool checkRec(TPrinter* stampa, TToken_string* rec);
// Controllo che siano presenti records
bool checkNotEmpty();
// Controllo finale prima di inviare il tutto, se ci sono fatture
// con più volte lo stesso codice aliquota disabilito il precedente
void theFinalCheckDown();
// Mette il flag di invio = [flag] per la riga numero [nrow]
void flagRow(int nrow, TString flag);
// Salto se la riga ha un tipo invio non del filtro
bool checkInvio(const TString& invio);
};
// Funzione inline di stampa
inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr);
TFp_mask& msk();
/////////////////////////////////////////////////////////////////////////////////////
// TFp_app
/////////////////////////////////////////////////////////////////////////////////////
struct clifoDoc
{
long contCliFo;
long countDoc;
std::map<TString, long> docID;
};
class TFp_app : public TSkeleton_application
{
TAnagrafica _ditta;
TString16 _cofi;
TFilename _dbname;
TLog_report* _log;
TString _logTFF;
bool _append;
TString myrfso;
static long header;
// Solitamente nei programmi di campo cerco di sfruttare le classi interne ma per mancanza di tempo sono costretto a usare l'std::vector
std::map<TString, clifoDoc> mCliDoc;
private:
int parse_line(const TString& line, TString& var, TString& val) const;
bool create_table(TScanner& TFF, const TString& table);
TString getKey(TToken_string* strarr);
TString getHeader(TToken_string* strarr);
TString getBody(TToken_string* strarr, bool add = true);
bool tff0100(TSheet_field& sheet); // Header esportazione
bool tff0200(TString key); // Anagrafica ditta
bool tff0300(TString key, TRectype r_ana); // Rappresentante fiscale ditta
bool tff0400(TSheet_field& sheet); // Anagrafica clifo
bool tff0700(TSheet_field& sheet); // Testata documento
bool tff2200(TToken_string* strarr, int nriga); // Riepilogo aliquote
bool tff3100(TToken_string* strarr, TRectype r_ana); // Rappresentante fiscale clifo
bool setEsportato(TSheet_field& sheet);
bool emptyTables(TString key); // Cancella da tutte le tabelle i record con chiave key
protected:
void log(int severity, const char* msg);
bool show_log();
bool syncronizeDB();
bool verifyDB(const bool create);
public:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
bool send(TFp_mask* msk);
TFp_app() : _log(NULL) {}
};
#endif

1849
src/fp/fp0300.cpp Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

26
src/fp/fp0300a.h Normal file
View File

@ -0,0 +1,26 @@
#define START_MASK 301
#define F_DATAINI 301
#define F_DATAEND 302
#define F_FATTSEL 303
#define F_COFI 304
#define F_DATIPODOC 305
#define F_ATIPODOC 306
#define END_MASK 399
#define F_DOCS 201
#define S_SELECTED 101
#define S_ANNO 102
#define S_CODNUM 103
#define S_TIPODOC 104
#define S_CODSDI 105
#define S_NDOC 106
#define S_DATADOC 107
#define S_CLIENTE 108
#define S_RAGSOC 109
#define S_UFFICIO 110
#define S_RIFAMM 111
#define S_COFI 112
#define S_SPLITPAY 113
#define S_ATTACH 114
#define S_ONLYGEN 115

223
src/fp/fp0300a.uml Normal file
View File

@ -0,0 +1,223 @@
#include "fp0300a.h"
TOOLBAR "topbar" 0 0 0 2
#include <allbar.h>
ENDPAGE
PAGE "Fatture Pubblica Amministrazione" 0 2 0 0
DATE F_DATAINI
BEGIN
PROMPT 1 0 "Data iniziale"
CHECKTYPE REQUIRED
END
DATE F_DATAEND
BEGIN
PROMPT 30 0 "Data finale"
VALIDATE DATE_CMP_FUNC >= F_DATAINI
WARNING "La data finale non può essere minore della data iniziale"
CHECKTYPE REQUIRED
END
RADIOBUTTON F_FATTSEL 25
BEGIN
PROMPT 1 1 "Fatture da visualizzare"
ITEM "|Da inviare"
ITEM "P|Pronte"
ITEM "X|XML Generato"
ITEM "E|In errore"
ITEM "N|Accettate"
END
STRING F_COFI 16
BEGIN
PROMPT 30 1 "Codice fiscale trasmittente "
CHECKTYPE REQUIRED
END
STRING F_DATIPODOC 4
BEGIN
PROMPT 30 2 "Da tipo doc "
FIELD TIPODOC
HELP "Codice tipo documento"
USE %TIP
SELECT S12!=""
INPUT CODTAB F_DATIPODOC
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo SDI@10" S12
OUTPUT F_DATIPODOC CODTAB
CHECKTYPE FORCED
FLAG "UP"
END
STRING F_ATIPODOC 4
BEGIN
PROMPT 30 3 "A tipo doc "
FIELD TIPODOC
HELP "Codice tipo documento"
USE %TIP
SELECT S12!=""
INPUT CODTAB F_ATIPODOC
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo SDI@10" S12
OUTPUT F_ATIPODOC CODTAB
CHECKTYPE FORCED
FLAG "UP"
END
STRING DLG_PROFILE 256
BEGIN
PROMPT 1 -1 "Profilo "
PSELECT
FLAGS "H"
END
ENDPAGE
PAGE "Elenco Fatture" 0 2 0 0
SPREADSHEET F_DOCS
BEGIN
PROMPT 0 2 ""
ITEM "@1"
ITEM "Anno"
ITEM "Cod.\nNum.@4"
ITEM "Tipo\nDoc@4"
ITEM "Tipo SDI@4"
ITEM "Num.\nDoc.@7"
ITEM "Data\nDoc.@10"
ITEM "Cliente"
ITEM "Ragione Sociale@50"
ITEM "Codice destinatario"
ITEM "Riferimento\nAmministrazione@20"
ITEM "Codice Fiscale@16"
ITEM "Scissione\nPagamenti@9"
ITEM "Allegati"
ITEM "Solo generazione"
END
ENDPAGE
ENDMASK
PAGE "Documento" -1 -1 78 9
BOOLEAN S_SELECTED
BEGIN
PROMPT 1 1 "Da elaborare"
END
NUMBER S_ANNO 4
BEGIN
PROMPT 1 2 "Anno "
FLAGS "D"
END
STRING S_CODNUM 4
BEGIN
PROMPT 21 2 "Numerazione "
FLAGS "D"
END
STRING S_TIPODOC 4
BEGIN
PROMPT 21 2 "Tipo Documento "
FLAGS "D"
END
STRING S_CODSDI 4
BEGIN
PROMPT 41 2 "Tipo SDI "
FLAGS "D"
END
NUMBER S_NDOC 7
BEGIN
PROMPT 1 3 "Numero "
FLAGS "D"
END
DATE S_DATADOC
BEGIN
PROMPT 21 3 "Data "
FLAGS "D"
END
NUMBER S_CLIENTE 6
BEGIN
PROMPT 1 4 "Cliente "
FLAGS "D"
END
STRING S_RAGSOC 50
BEGIN
PROMPT 21 4 ""
FLAGS "D"
END
STRING S_UFFICIO 6
BEGIN
PROMPT 1 5 ""
FLAGS "D"
END
STRING S_RIFAMM 20
BEGIN
PROMPT 21 5 ""
FLAGS "D"
END
STRING S_COFI 20
BEGIN
PROMPT 1 6 ""
FLAGS "D"
END
BOOLEAN S_SPLITPAY
BEGIN
PROMPT 1 7 "Assogettato scissione pagamenti art.17 ter DPR 633/72"
FLAGS "D"
END
BOOLEAN S_ATTACH
BEGIN
PROMPT 1 8 "Documenti in allegato"
FLAGS "D"
END
BOOLEAN S_ONLYGEN
BEGIN
PROMPT 20 8 "Solo generazione"
FLAGS "D"
END
ENDPAGE
TOOLBAR "Documento" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_USER 2 2
BEGIN
PROMPT 1 1 "Collega"
PICTURE TOOL_LINK
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 1 1 ""
END
ENDPAGE
ENDMASK

102
src/fp/fplib01.cpp Normal file
View File

@ -0,0 +1,102 @@
#include "fplib01.h"
#include <prefix.h>
#include <config.h>
#include <utility.h>
#include <scanner.h>
#include <xvt.h>
#include <diction.h>
#include "text.h"
#include <isam.h>
void set_connection(SSimple_query& s)
{
if (s.sq_connect(
TString() << ini_get_string(CONFIG_DITTA, "fp", "ip") << "@" << ini_get_string(CONFIG_DITTA, "fp", "db"),
ini_get_string(CONFIG_DITTA, "fp", "usr"),
decode(ini_get_string(CONFIG_DITTA, "fp", "psw")),
TSDB_MSSQL) != NOERR)
fatal_box("Impossibile connettersi al DB esterno");
}
SSimple_query& db()
{
static SSimple_query* db = nullptr;
if (db == nullptr)
{
db = new SSimple_query();
set_connection(*db);
// Non utilizzo l'autocommit, viene gestito manualmente
db->sq_set_autocommit(false);
}
return *db;
}
string getline(ifstream& f);
bool check_tables()
{
/*
* Da questo programma in poi verrà utilizzato un sistema diverso per la creazione e aggiornamento delle tabelle
* Verranno utilizzati dei file.sql aggiornati con il numero di patch, leggermente scomodo durante la creazione ma facile per i controlli successivamente
*/
SLIST files = xvt_fsys_list_files(".sql", "sql/fp0/", false);
TLocalisamfile tabmod(LF_TABMOD);
tabmod.put("MOD", "FP");
tabmod.put("COD", "SQL");
tabmod.put("CODTAB", "VERSION");
TString version;
if (tabmod.read() == NOERR)
version = tabmod.get("S0");
for(SLIST_ELT file = xvt_slist_get_first(files); file; file = xvt_slist_get_next(files, file))
{
TString file_version = TFilename(file->str).name_only();
file_version = file_version.mid(2, 4);
if (file_version <= version)
continue;
ifstream f(file->str);
if(f.is_open())
{
string s;
while(!f.eof())
{
s += getline(f);
// Cerco un ;
const int limiter = s.find(';') + 1;
if(limiter > 0)
{
string query = s.substr(0, limiter);
s.erase(0, limiter);
if(!db().sq_set_exec(query) || !db().sq_commit())
{
fatal_box("Impossibile eseguire/salvare la query:\n%s\n%s", query.c_str(), db().sq_get_string_error());
}
}
}
}
else
{
cantread_box(file->str);
return false;
}
// Salvo su tabmod
tabmod.zero();
tabmod.put("MOD", "FP");
tabmod.put("COD", "SQL");
tabmod.put("CODTAB", "VERSION");
tabmod.put("S0", file_version);
if(tabmod.rewrite_write() != NOERR && !yesno_box("Attenzione! Errore di aggiornamento versione di Database in Campo, continuare? %s", file_version))
{
return false;
}
}
return true;
}
string getline(ifstream& f)
{
string app;
getline(f, app);
return app;
}

13
src/fp/fplib01.h Normal file
View File

@ -0,0 +1,13 @@
#ifndef __FPLIB01_H
#define __FPLIB01_H
#include <tsdb.h>
#include <utility.h>
#include <config.h>
#define SQL_FLD "sql/"
SSimple_query& db();
bool check_tables();
#endif // __FPLIB01_H

1656
src/fp/sql/fp0100.sql Normal file

File diff suppressed because it is too large Load Diff

View File

@ -406,8 +406,15 @@ const char* TApplication::get_module_name() const
}
if (!ok)
{
cantaccess_box(module);
module.cut(0);
if(is_power_station())
{
warning_box("Attenzione! Non sei abilitato per l'utilizzo del modulo %s", static_cast<const char*>(module));
}
else
{
cantaccess_box(module);
module.cut(0);
}
}
}
}

View File

@ -19,7 +19,7 @@ at AVIS Provinciale
in Elenchi Intracomunitari
po Penna Ottica
ab Analisi di bilancio
pa Fatturazione elettronica pubblica amministrazione
pa Fattura PA
ca Contabilità Analitica
sl Stato Avanzamento Lavori
ic IVA per cassa
@ -35,7 +35,7 @@ or Ordini
ef Effetti
db Distinta Base
pr Provvigioni Agenti
?? Modulo vario ex-cu Codice Unico Progetto
fp Fatturazione tra Privati + PA
sv Statistiche di Vendita
mr Manufacturing Resource Planning
?? Modulo vario ex-ec Collegamento E-commerce
@ -46,6 +46,5 @@ l2 Lavanderie 02
bs Bee Store
ha Hardy Caffè
ri Riclassificazioni
vd Vendita al dettaglio
gv Gestione versamenti F24
tf Trasferimento fatture
gv Gestione versamenti
tf Trasferimento Fatture

View File

@ -37,7 +37,7 @@
#define EFAUT 34
#define DBAUT 35
#define PRAUT 36
//#define CUAUT 37 Obsoleta CUP implicita in CT (1)
#define FPAUT 37
#define SVAUT 38
#define MRAUT 39
#define ECAUT 40

View File

@ -278,7 +278,7 @@ protected:
// @cmember Ritorna la posizione della colonna con identificatore <p cid>
int cid2col(short cid) const;
// @cmember Ritorna la colonna logica con identificatore <p cid>
int cid2index(short cid) const;
static int cid2index(short cid);
// @cmember Ritorna la colonna corrispondente al campo <p f> della maschera
int field2col(const TOperable_field* f) const;
@ -804,10 +804,9 @@ int TSpreadsheet::cid2col(short cid) const
return 0;
}
int TSpreadsheet::cid2index(short cid) const
int TSpreadsheet::cid2index(short cid)
{
CHECKD(cid >= FIRST_FIELD, "Bad column id ", cid);
return (cid % 100) - 1;
return xvtil_cid2index(cid);
}
int TSpreadsheet::field2col(const TOperable_field* f) const

View File

@ -6,7 +6,7 @@
* Classe per esecuzioni di query temporanee (wrapper semplice per SACommand) *
******************************************************************************/
const TDate SSimpleQuery::sqGetDate(const char * field)
const TDate SSimple_query::sq_get_date(const char * field)
{
const TDate app(_rec.get_date(field));
return app;

View File

@ -63,7 +63,7 @@
* Preferisco scrivere un po' di codice ridondante adesso che andare a fare *
* salti mortali dopo *
********************************************************************************/
class SSimpleQuery
class SSimple_query
{
protected:
TXvt_recordset _rec;
@ -72,114 +72,115 @@ protected:
public:
/**< Costruttore, non inizializza nulla, da caricare successivamente */
SSimpleQuery() {}
SSimple_query() = default;
/**< Costruttore, Accetta in ingresso dei parametri per la connessione, volendo è anche possibile impostare una query ed eseguirla. Attenzione! Non risponde se la query ha avuto un esito positivo o negativo! */
SSimpleQuery(const char* db, const char* user, const char* pass, TT_driver tipoDb, const char * query = "", const bool ex = false, const bool freezed = false) : _rec(db, user, pass, tipoDb, query, ex, freezed) {}
SSimple_query(const char* db, const char* user, const char* pass, TT_driver tipoDb, const char * query = "", const bool ex = false, const bool freezed = false) : _rec(db, user, pass, tipoDb, query, ex, freezed) {}
//SSimpleQuery(const TString& db, const TString& user, const TString& pass, TT_driver tipoDb, const char * query = "", const bool ex = false, const bool freezed = false) : _rec(db, user, pass, tipoDb, query, ex, freezed) {}
/**< Distruttore */
virtual ~SSimpleQuery() {}
virtual ~SSimple_query() = default;
// Connection functions
/**< Eseguo la connessione */
int sqConnect(const char* db, const char* user, const char* pass, TT_driver tipoDb) { return _rec.connect(db, user, pass, tipoDb); }
int sq_connect(const char* db, const char* user, const char* pass, TT_driver tipoDb) { return _rec.connect(db, user, pass, tipoDb); }
/* Mi scollego */
void sqDisconnect() { _rec.disconnect(); }
void sq_disconnect() { _rec.disconnect(); }
/**< Esegue la commit, di default in caso di errore viene chiamato il metodo rollback() */
const bool sqCommit(bool autoRoll = true) { return _rec.commit(); }
const bool sq_commit(bool autoRoll = true) { return _rec.commit(); }
/**< Esegue il rollback all'ultimo commit */
const bool sqRollback() { _rec.rollback(); }
const bool sq_rollback() { return _rec.rollback(); }
/**< Imposto il tipo di client che utilizzo */
void sqSetClient(int client) { _rec.setClient((TT_driver)client); }
void sqSetClient(TT_driver client) { _rec.setClient(client); }
void sq_set_client(int client) { _rec.setClient((TT_driver)client); }
void sq_set_client(TT_driver client) { _rec.setClient(client); }
// Imposto una opzione generica dellla connessione
void sqSetConOption(const char* opt) { _rec.setConOption(opt); }
void sq_set_con_option(const char* opt) { _rec.setConOption(opt); }
/**< Abilito/Disabilito l'autocommit, (disabilitato di default) */
void sqSetAutocommit(bool ac) { _rec.setAutocommit(ac); }
void sq_set_autocommit(bool ac) { _rec.setAutocommit(ac); }
/** Imposta la visibilità delle transazioni (vedi Funzione) */
void sqSetVisibility(isoLvl vis = committed) { _rec.setVisibility(vis); }
void sq_set_visibility(isoLvl vis = committed) { _rec.setVisibility(vis); }
// Getters
/** Ritorna se la conessione è connessa */
const bool sqIsConnect() const { return _rec.isConnect(); }
const bool sq_is_connect() const { return _rec.isConnect(); }
/**< Ritorna se la connessione è attiva */
const bool sqIsAlive() const { return _rec.isAlive(); }
const bool sq_is_alive() const { return _rec.isAlive(); }
/** Ritorna la visibilità impostata */
const int sqGetVisibility() { return _rec.getVisibility(); }
const int sq_get_visibility() { return _rec.getVisibility(); }
/**< Ritorna se è attivo l'autocommit, true -> attivo, false -> disattivo o sconosciuto */
const bool sqGetAutocommit() { return _rec.getAutocommit(); }
const bool sq_get_autocommit() { return _rec.getAutocommit(); }
/**< Ritorna il valore dell'opzione specificata */
const char* sqGetOption(const char* opt) { return _rec.getOption(opt); }
const char* sq_get_option(const char* opt) { return _rec.getOption(opt); }
/**< Ritorno la versione del Client che sto utilizzando */
const long sqGetClientV() { return _rec.getClientV(); }
const long sq_get_client_v() { return _rec.getClientV(); }
/**< Ritorno la versione del Server che sto utilizzando */
const char* sqGetServerV() { return _rec.getServerV(); }
const char* sq_get_server_v() { return _rec.getServerV(); }
/**< Ritorno la versione del Server che sto utilizzando in formato numerico */
const long sqGetServerVN() { return _rec.getServerVN(); }
const long sq_get_server_vn() { return _rec.getServerVN(); }
/**< Ritorno se il recordset è carico */
const bool sqIsLoaded() const { return _rec.isLoaded(); }
const bool sq_is_loaded() const { return _rec.isLoaded(); }
/** Ritorno il numero di elementi nella query */
const long sqItems() { _rec.items(); }
const long sq_items() { return _rec.items(); }
// Conguration
/**< Imposta la query ricevuta come (const char *) nel recordset */
const bool sqSet(const char* query) { return _rec.set(query); }
const bool sq_set(const char* query) { return _rec.set(query); }
/**< Imposta la query ricevuta come (string) nel recordset */
const bool sqSet(string query) { return _rec.set(query.c_str()); }
const bool sq_set(string query) { return _rec.set(query.c_str()); }
/**< Imposta la query ricevuta come (TString) nel recordset */
const bool sqSet(TString& query) { return _rec.set(static_cast<const char *>(query)); }
const bool sq_set(TString& query) { return _rec.set(static_cast<const char *>(query)); }
/**< Esegue la query impostata nel recordset, se viene passato autoF == true esegue anche un comando sqNext() */
const bool sqExec(bool autoF = true) { return _rec.exec(autoF); }
const bool sq_exec(bool autoF = true) { return _rec.exec(autoF); }
/**< Unisce le funzioni sqSet e sqExec, riceve la query come (const char *) */
const bool sqSetExec(const char* query, bool autoF = true) { _rec.set(query); return _rec.exec(autoF); }
const bool sq_set_exec(const char* query, bool autoF = true) { _rec.set(query); return _rec.exec(autoF); }
/**< Unisce le funzioni sqSet e sqExec, riceve la query come (string) */
const bool sqSetExec(string query, bool autoF = true) { _rec.set(query.c_str()); return _rec.exec(autoF); }
const bool sq_set_exec(string query, bool autoF = true) { _rec.set(query.c_str()); return _rec.exec(autoF); }
/**< Unisce le funzioni sqSet e sqExec, riceve la query come (TString) */
const bool sqSetExec(TString& query, bool autoF = true);
const bool sq_set_exec(TString& query, bool autoF = true) { return sq_set_exec(static_cast<const char*>(query), autoF); }
/**< Si sposta avanti di un record, in caso di esito negativo valorizza _stringError e _codeError */
const bool sqNext() { return _rec.next(); }
const bool sq_next() { return _rec.next(); }
/**< Si sposta indietro di un record, in caso di esito negativo valorizza _stringError e _codeError */
const bool sqPrev() { return _rec.prev(); }
const bool sq_prev() { return _rec.prev(); }
/**< Si sposta avanti di un record, in caso di esito negativo valorizza _stringError e _codeError */
const bool sqFirst() { return _rec.first(); }
const bool sq_first() { return _rec.first(); }
/**< Si sposta al primo record, in caso di esito negativo valorizza _stringError e _codeError */
const bool sqLast() { return _rec.last(); }
const bool sq_last() { return _rec.last(); }
/**< Si sposta alla posizione n, in caso di esito negativo valorizza _stringError e _codeError */
const bool sqGo(int newPos) { return _rec.go(newPos); }
const bool sq_go(int newPos) { return _rec.go(newPos); }
/**< Ritorna il numero di righe affette dall'ultima query */
const int sqRowsAffected() { return _rec.rowsAffected(); }
const int sq_rows_affected() { return _rec.rowsAffected(); }
// Getters
/**< Ritorna il valore nel campo (field) in formato (int) */
const int sqGetInt(const char* field) { return _rec.get_int(field); }
const int sq_get_int(const char* field) { return _rec.get_int(field); }
/**< Ritorna il valore nel campo (field) in formato (short) */
const short sqGetShort(const char* field) { return _rec.get_short(field); }
const short sq_get_short(const char* field) { return _rec.get_short(field); }
/**< Ritorna il valore nel campo (field) in formato (long) */
const long sqGetLong(const char* field) { return _rec.get_long(field); }
const long sq_get_long(const char* field) { return _rec.get_long(field); }
/**< Ritorna il valore nel campo (field) in formato (double) */
const double sqGetDouble(const char* field) { return _rec.get_double(field); }
const double sq_get_double(const char* field) { return _rec.get_double(field); }
/**< Ritorna il valore nel campo (field) in formato (bool) */
const bool sqGetBool(const char* field) { return _rec.get_bool(field); }
const bool sq_get_bool(const char* field) { return _rec.get_bool(field); }
/**< Ritorna il valore nel campo (field) in formato (TDate) */
const TDate sqGetDate(const char* field);
const TDate sq_get_date(const char* field);
/**< Ritorna il valore nel campo (field) in formato (real) */
const real sqGetReal(const char* field);
const real sq_get_real(const char* field);
/**< Ritorna il valore nel campo (field) in formato (SADateTime), Campo non gestisce le ore */
//SADateTime sqGetDateTime(const char* field) { get_short(field); }
/**< Ritorna il valore nel campo (field) passato come (const char *) in formato (const char *) */
const char* sqGet(const char* field) { return _rec.get(field); }
const char* sq_get(const char* field) { return _rec.get(field); }
/**< Ritorna il valore nel campo (field) passato come (string) in formato (const char *) */
const char* sqGet(string field) { return _rec.get(field.c_str()); }
const char* sq_get(string field) { return _rec.get(field.c_str()); }
/**< Ritorna il valore nel campo (field) passato come (TString) in formato (const char *) */
const char* sqGet(TString& field) { return _rec.get(static_cast<const char*>(field)); }
const char* sq_get(TString& field) { return _rec.get(static_cast<const char*>(field)); }
/**< Ritorna il valore nel campo (field) in formato (char) */
const char sqGetChar(const char* field) { return _rec.get_char(field); }
const char sq_get_char(const char* field) { return _rec.get_char(field); }
/**< Ritorna la posizione attuale */
const long sqPos() const { return _rec.pos(); }
const long sq_pos() const { return _rec.pos(); }
// Error Getters
/**< Ritorno l'ultimo codice errore segnalato in formato /int) */
const long sqGetCodeError(bool erase = true) { return _rec.get_code_error(erase); }
const long sq_get_code_error(bool erase = true) { return _rec.get_code_error(erase); }
/**< Ritorno l'ultima stringa di errore segnalato in formato (const char *) */
const char* sqGetStringError(bool erase = true) { return _rec.get_string_error(erase); }
const char* sq_get_string_error(bool erase = true) { return _rec.get_string_error(erase); }
//char * getCharPointer(const char * field) { return const_cast<char*>(static_cast<const char*>(recset.Field(field).asString())); }
};

View File

@ -707,3 +707,13 @@ void quoted_string(TString& query, const char* val)
}
query << '\'';
}
TString& to_tstring(long n)
{
return get_tmp_string().cut(0) << n;
}
TString& to_tstring(int n)
{
return to_tstring(static_cast<long>(n));
}

View File

@ -73,4 +73,7 @@ void quoted_string(TString& query, const char* val);
inline const char* get_iva_sirio() // Ritorna la partita IVA della Sirio
{ return "04879210963"; }
TString& to_tstring(long n);
TString& to_tstring(int n);
#endif /* __UTILITY_H */

View File

@ -9,7 +9,8 @@
#include <urldefid.h>
#include <utility.h>
#include <nditte.h>
#include <nditte.h>
#include <msksheet.h>
short CHARX = 8;
short CHARY = 14;
@ -842,3 +843,8 @@ PEN_STYLE trans_pen(
return ps;
}
int xvtil_cid2index(const int cid)
{
CHECKD(cid >= FIRST_FIELD, "Bad column id ", cid);
return (cid % 100) - 1;
}

View File

@ -45,6 +45,8 @@ bool xvtil_popup_warning(const char* msg);
bool xvtil_popup_error(const char* msg);
bool xvtil_system_error(unsigned long lasterror, ...);
int xvtil_cid2index(const int cid);
void beep(int severity = 0);
void do_events();

View File

@ -319,7 +319,9 @@ public:
const TString & caus_anticipo() const {return get("S10"); }
const TString & tipi_iva_validi() const {return get("S11"); }
// Ritorna il ripo documento in formato SDI (TD01, TD02 ..)
const TString & tipo_doc_sdi() const { return get("S12"); }
const TString & tipo_doc_sdi() const { return get("S3").mid(37,4); }
// Ritorna il regime fiscale
const TString & reg_fisc() const { return get("S3").mid(41, 4); }
const char stato_finale_inserimento() const {return get("S2")[0]; }
const char stato_finale_stampa() const {return get("S2")[1]; }
const char stato_bloccato() const {return get("S2")[2]; }
@ -351,7 +353,7 @@ public:
bool fattura_commerciale() const { return get_bool("B9"); }
bool allega_documenti() const { return get_bool("B10"); }
bool auto_add() const { return get_bool("B11"); }
bool invio_xml() const { return get_bool("B12"); }
bool invio_xml() const { return get_bool("B13"); }
const TString& stringa_descrizione_documento() const { return _str_desc_doc; }
const TString& stringa_descrizione_riga() const { return _str_desc_rdoc; }

View File

@ -26,7 +26,8 @@
#define F_NATURA 124
#define F_NOTACREDDEB 125
#define F_LORDO 126
#define F_FATCOM 127
#define F_REG_FISC 127
#define F_FATCOM 128
#define F_PMAIL 129
#define F_PSTAMPA2 130
#define F_NCOPIE2 131

View File

@ -85,7 +85,7 @@ END
LIST F_TIPO_SDI 35
BEGIN
PROMPT 2 5 "Tipo documento SDI "
FIELD S12
FIELD S3[37,40]
ITEM "|"
ITEM "TD01|TD01 Fattura" MESSAGE ENABLE,F_NOTACREDDEB|""
ITEM "TD02|TD02 Acconto/Anticipo su fattura" MESSAGE ENABLE,F_NOTACREDDEB|""
@ -98,7 +98,7 @@ END
BOOLEAN F_ESPORTA_FP
BEGIN
PROMPT 65 5 "Invio XML"
FIELD B12
FIELD B13
END
GROUPBOX DLG_NULL 78 5
@ -202,30 +202,55 @@ END
BOOLEAN F_NOTACREDDEB
BEGIN
PROMPT 2 13 "Nota di credito/debito"
PROMPT 2 13 "Nota di cred/deb"
FIELD B7
END
BOOLEAN F_LORDO
LIST F_REG_FISC 40
BEGIN
PROMPT 40 13 "Calcolo importi al lordo"
FIELD B8
MESSAGE TRUE CLEAR,F_FATCOM
MESSAGE FALSE ENABLE,F_FATCOM
PROMPT 23 13 "Regime Fisc. "
FIELD S3[41,44]
ITEM "|"
ITEM "RF01|RF01 Ordinario"
ITEM "RF02|RF02 Contribuenti minimi"
ITEM "RF04|RF04 Agricoltura, connesse e pesca"
ITEM "RF05|RF05 Vendita sali e tabacchi"
ITEM "RF06|RF06 Commercio fiammiferi"
ITEM "RF07|RF07 Editoria"
ITEM "RF08|RF08 Gestione servizi tel. pubblica"
ITEM "RF09|RF09 Rivendita DdT pubblico e di sosta"
ITEM "RF10|RF10 Intr., giochi e altre attività"
ITEM "RF11|RF11 Agenzie viaggi e turismo"
ITEM "RF12|RF12 Agriturismo"
ITEM "RF13|RF13 Vendite a domicilio"
ITEM "RF14|RF14 Rivendita usato, arte, ant. o col."
ITEM "RF15|RF15 Asta darte, ant. o da col."
ITEM "RF16|RF16 IVA per cassa P.A."
ITEM "RF17|RF17 IVA per cassa"
ITEM "RF18|RF18 Altro"
ITEM "RF19|RF19 Regime forfettario"
END
BOOLEAN F_SPESEAUT
BEGIN
PROMPT 2 14 "Addebito automatico spese cliente"
PROMPT 2 14 "Addebito auto spese cliente"
FIELD B0
END
BOOLEAN F_FATCOM
BEGIN
PROMPT 40 14 "Calcolo fattura commerciale"
PROMPT 30 14 "Calcolo fattura commerciale"
FIELD B9
END
BOOLEAN F_LORDO
BEGIN
PROMPT 55 14 "Calcolo importi al lordo"
FIELD B8
MESSAGE TRUE CLEAR,F_FATCOM
MESSAGE FALSE ENABLE,F_FATCOM
END
BOOLEAN F_MOVMAG
BEGIN
PROMPT 2 15 "Mov. magazzino"

View File

@ -11,7 +11,7 @@
* Classe per esecuzioni di query temporanee (wrapper semplice per SACommand) *
******************************************************************************/
TXvt_recordset::TXvt_recordset()
TXvt_recordset::TXvt_recordset() : _freezed(false)
{
_con = new SAConnection;
_recset = new SACommand;
@ -28,7 +28,7 @@ TXvt_recordset::TXvt_recordset()
TXvt_recordset::TXvt_recordset(const char* db, const char* user, const char* pass, TT_driver tipoDb, const char * query, const bool ex, const bool freezed)
: _db(db), _usr(user), _psw(pass), _drv(tipoDb)
: _db(db), _usr(user), _psw(pass), _drv(tipoDb), _freezed(false)
{
_con = new SAConnection;
if(connect(db, user, pass, tipoDb) == NOERR)
@ -62,14 +62,14 @@ TXvt_recordset::~TXvt_recordset()
{
try
{
// Se non è connesso viene lanciata l'eccezione
if(_CON(_con)->isConnected())
_CON(_con)->Disconnect();
if(_con != NULL)
delete _con;
if(_recset != NULL)
delete _recset;
}
catch (...) {}
// Prima cancellare il recordset POI la connessione
delete _recset;
delete _con;
}
/* PRIVATE FUNCTIONS **************************************************************************************************/
@ -301,22 +301,22 @@ bool TXvt_recordset::set(const char* query)
bool TXvt_recordset::exec(bool autoF)
{
CHECK_FREEZED
bool ok = false;
try
{
_RCS(_recset)->Execute();
_recno = -1;
if (autoF)
{
next();
}
// Se trovo almeno un "select" faccio l'autofetch
SAString s = _RCS(_recset)->CommandText(); s.MakeUpper();
ok = s.Find("SELECT") != SIZE_MAX && autoF ? next() : true;
}
catch (SAException &x)
{
_codeError = x.ErrNativeCode();
_stringError = x.ErrMessage();
return false;
ok = false;
}
return true;
return ok;
}
bool TXvt_recordset::setExec(const char* query, bool autoF)