#ifndef SQLTABLE_H
#define SQLTABLE_H

#include <QString>
#include <QStringList>

const QString DBInfoCommand = "INSERT INTO DBINFO (VERSION, SUBVERSION) VALUES (:VERSION, :SUBVERSION);";


//--------------- BASE DE DATOS DE EMPRESAS, LISTADO ------------------------
const QString tEmpresas = "CREATE TABLE ENTERPRISES ("
        "NAME               VARCHAR (100) NOT NULL, "               // 00. Nombre
        "CIF                VARCHAR (20)  NOT NULL, "               // 01. Nombre
        "DBNAME             VARCHAR (100) NOT NULL, "               // 02. Nombre
        "PATH               VARCHAR (100) NOT NULL, "               // 03. Nombre
        "CREATEDAT          DATETIME DEFAULT (CURRENT_TIMESTAMP), " // 04. Nombre
        "CREATEDBY          VARCHAR (100), "                        // 05. Nombre
        "PRIMARY KEY (NAME, CIF)"
        ");";

//--------------- BASE DE DATOS DE USUARIOS ------------------------
const QString tDBUsers = "CREATE TABLE USERS ("
        "ID                 INTEGER PRIMARY KEY AUTOINCREMENT, "
        "NAME               VARCHAR(60), "                          // 01. Nombre
        "SURNAME            VARCHAR(60), "                          // 02. Apellidos
        "USERNAME           VARCHAR(60) NOT NULL UNIQUE, "          // 03. Forma
        "PASSWORD           VARCHAR(60), "                          // 04. Forma
        "USERTYPE           INTEGER, "                              // 05. Forma
        "PERMITS            VARCHAR(350), "                         // 06. Forma
        "LOCKED             BOOLEAN, "                              // 07. Forma
        "PICTURE            BLOB, "                                 // 08. Forma
        "CREATEDAT          DATETIME DEFAULT (CURRENT_TIMESTAMP),"  // 09.  Fecha de creación
        "CREATEDBY          VARCHAR(100)"
        ");";

//------------ informción básica de la databse -----------------------------
const QString tDBInfo = "CREATE TABLE DBINFO ("
        "ID                 INTEGER PRIMARY KEY AUTOINCREMENT, "
        "VERSION            VARCHAR(3) NOT NULL, "
        "SUBVERSION         VARCHAR(3) NOT NULL, "
        "CREATEDAT          DATETIME DEFAULT (CURRENT_TIMESTAMP)"   // 25. Fecha de creación
        ");";

//----------------------- INFORMACION DE LA EMPRESA -------------------------
const QString tEmpresaInfo = "CREATE TABLE ENTERPRISESINFO ("
        "ID                 INTEGER PRIMARY KEY AUTOINCREMENT, "    // 00.  ID
        "NAME               VARCHAR(100) NOT NULL, "                // 01.  Nombre de la empresa
        "CIF                VARCHAR(10) NOT NULL, "                 // 02.  CIF

        "ADDRESS            VARCHAR(40), "                          // 03.  Línea Dirección 1
        "POSTCODE           VARCHAR(10), "                          // 04.  Código postal
        "CITY               VARCHAR(80), "                          // 05.  Ciudad
        "PROVINCE           VARCHAR(80), "                          // 06.  Provincia
        "COUNTRY            VARCHAR(80), "                          // 07.  Pais

        "PHONE              VARCHAR(20), "                          // 08. Teléfono
        "MOBILE             VARCHAR(20), "                          // 09. Movil
        "FAX                VARCHAR(20), "                          // 10. Fax
        "EMAIL              VARCHAR(60), "                          // 11. e-mail
        "WEB                VARCHAR(60), "                          // 12. Web

        "CIF_COMMUNITY      VARCHAR(10), "                          // 13. CIF Comunitario
        "IAE                VARCHAR(10), "                          // 14. IAE
        "CNAE               VARCHAR(10), "                          // 15. CNAE
        "DCNAE              VARCHAR(200), "                         // 16. Descripción CNAE

        "LOGO1              BLOB, "                                 // 17. Logo1
        "LOGO2              BLOB, "                                 // 18. Logo2

        "CREATEDAT          DATETIME DEFAULT (CURRENT_TIMESTAMP), " // 19. Fecha de creación
        "CREATEDBY          VARCHAR(100)"
        ");";

//----------------------- THIRD -------------------------------------------
const QString tThird = "CREATE TABLE THIRD ("
        "ID                 INTEGER PRIMARY KEY AUTOINCREMENT, "    // 00. ROW ID

        "FORM               VARCHAR(25), "                          // 01. Forma
        "CIF                VARCHAR(20), "                          // 02. CIF
        "NAME               VARCHAR(128) NOT NULL, "                // 03. Nombre del cliente
        "NICKNAME           VARCHAR(128), "                         // 04. Nombre del cliente
        "FAMILY             VARCHAR(25), "                          // 05. Familia de clientes
        "INTRA_FC           VARCHAR(20), "                          // 06. Intracommunitary fiscal code
        "STATE              INT NOT NULL,"                          // 07. Estado

        "CLIENT_STATE       INT NOT NULL, "                         // 08. intracommunitary fiscal code
        "CLIENT_CODE        VARCHAR(20), "                          // 09. intracommunitary fiscal code
        "CLIENT_ACCOUNT     VARCHAR (24), "                         // 10. intracommunitary fiscal code

        "SUPPLIER_STATE     INT NOT NULL, "                         // 11. intracommunitary fiscal code
        "SUPPLIER_CODE      VARCHAR(20), "                          // 12. Code
        "SUPPLIER_ACCOUNT   VARCHAR (24), "                         // 13. intracommunitary fiscal code

        // Dirección del cliente:
        "ADDRESS            VARCHAR(40), "                          // 14. Línea Dirección 1
        "POSTCODE           VARCHAR(9), "                           // 15. Código postal
        "CITY               VARCHAR(80), "                          // 16. Ciudad
        "PROVINCE           VARCHAR(80), "                          // 17. Provincia
        "COUNTRY_ID         VARCHAR(2), "                           // 18. Diminutivo del pais

        "PHONE              VARCHAR(20), "                          // 19. Teléfono
        "MOBILE             VARCHAR(20), "                          // 20. Movil
        "FAX                VARCHAR(20), "                          // 21. Fax
        "EMAIL              VARCHAR(60), "                          // 22. e-mail
        "WEBSIDE            VARCHAR(60), "                          // 23. Web

        "PAYMENT_METHOD     VARCHAR(40), "                          // 24. Forma de Pago
        "PAYMENT_TYPE       VARCHAR(40), "                          // 25. Forma de Pago

        "LOGO               BLOB, "                                 // 26. Imagen
        "NOTE_PUBLIC        TEXT, "                                 // 27. intracommunitary fiscal code
        "NOTE_PRIVATE       TEXT, "                                 // 28. intracommunitary fiscal code

        "UPDATEDAT DATE DEFAULT CURRENT_DATE, "                     // 29. Fecha de creación
        "CREATEDAT DATE DEFAULT CURRENT_DATE, "                     // 30. Fecha de creación
        "CREATEDBY VARCHAR(100) "                                   // 31. intracommunitary fiscal code

        ");";

//----------------------- ELEMENTO ------------------------------------------
const QString tElemento = "CREATE TABLE ELEMENT ("
        "CODE               VARCHAR(20) UNIQUE PRIMARY KEY, "       // 00. Code
        "TYPE1              VARCHAR(2) NOT NULL, "                  // 01. Tipo
        "TYPE2              VARCHAR(2) NOT NULL, "                  // 02. Tipo
        "TITLE              VARCHAR(100) NOT NULL, "                // 03. Resumen
        "DESCRIPTION        BLOB, "                                 // 04. Descripción
        "FAMILY_ID          VARCHAR(9), "                           // 05. ID de Familia
        "UNIT_ID            VARCHAR(9), "                           // 06. ID de Unidad

        "DATE_UPDATE        DATE DEFAULT CURRENT_DATE, "            // 07. Fecha de la última modificación
        "REAL_PRICE         FLOAT, "                                // 08. PVP de compra
        "DISCOUNT           FLOAT, "                                // 09. Descuento frente a PVP
        "PURCHASE_PRICE     FLOAT, "                                // 10. Precio de compra
        "BENEFIT            FLOAT, "                                // 11. Beneficio respecto al PC
        "TAX                FLOAT, "                                // 12. IVA
        "SALE_PRICE         FLOAT, "                                // 13. Precio de venta

        "BARCODE            VARCHAR(20), "                          // 14. Código de Barras
        "IMAGE              BLOB, "                                 // 15. Imagen
        "STATE              BOOLEAN DEFAULT TRUE, "                 // 16. Elemento inactivo

        "MANUFACTURER       VARCHAR(40), "                          // 17. Fabricante o marca
        "GAMMA              VARCHAR(40), "                          // 18. Gama

        // Tamaño:
        "WEIGHT             FLOAT, "                                // 19. ID proveedor por defecto
        "HEIGHT             FLOAT, "                                // 20. ID proveedor por defecto
        "WIDTH              FLOAT, "                                // 21. ID proveedor por defecto
        "LENGHT             FLOAT, "                                // 22. ID proveedor por defecto

/* Interesa??
        // Proveedores:
        "SUPPLIER_ID_0              VARCHAR(10), "                  // 23. ID del proveedor
        "SUPPLIER_NAME_0            VARCHAR(60), "                  // 24. Nombre del proveedor
        "SUPPLIER_REFERENCE_0       VARCHAR(20), "                  // 25. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_0      FLOAT, "                        // 26. PVP
        "SUPPLIER_DISCOUNT_0        FLOAT, "                        // 27. Descuento
        "SUPPLIER_PURCHASE_PRICE_0  FLOAT, "                        // 28. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_0  FLOAT, "                        // 29. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_0     DATE, "                         // 30. Fecha de actualización del precio

        "SUPPLIER_ID_1 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_1 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_1 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_1 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_1 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_1 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_1 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_1 DATE, "  // 25. Fecha de actualización del precio

        "SUPPLIER_ID_2 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_2 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_2 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_2 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_2 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_2 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_2 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_2 DATE, "  // 25. Fecha de actualización del precio

        "SUPPLIER_ID_3 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_3 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_3 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_3 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_3 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_3 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_3 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_3 DATE, "  // 25. Fecha de actualización del precio

        "SUPPLIER_ID_4 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_4 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_4 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_4 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_4 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_4 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_4 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_4 DATE, "  // 25. Fecha de actualización del precio

        "SUPPLIER_ID_5 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_5 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_5 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_5 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_5 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_5 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_5 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_5 DATE, "  // 25. Fecha de actualización del precio

        "SUPPLIER_ID_6 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_6 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_6 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_6 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_6 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_6 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_6 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_6 DATE, "  // 25. Fecha de actualización del precio

        "SUPPLIER_ID_7 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_7 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_7 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_7 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_7 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_7 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_7 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_7 DATE, "  // 25. Fecha de actualización del precio

        "SUPPLIER_ID_8 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_8 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_8 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_8 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_8 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_8 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_8 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_8 DATE, "  // 25. Fecha de actualización del precio

        "SUPPLIER_ID_9 VARCHAR(10), "     // 18. ID del proveedor
        "SUPPLIER_NAME_9 VARCHAR(60), "   // 19. Nombre del proveedor
        "SUPPLIER_REFERENCE_9 VARCHAR(20), "   // 20. Ref. del elemento que tiene el proveedor
        "SUPPLIER_REAL_PRICE_9 FLOAT, "   // 21. PVP
        "SUPPLIER_DISCOUNT_9 FLOAT, "   // 22. Descuento
        "SUPPLIER_PURCHASE_PRICE_9 FLOAT, "   // 23. Precio compra
        "SUPPLIER_MINIMUM_AMOUNT_9 FLOAT, "  // 24. Cantidad mínima de pedido
        "SUPPLIER_DATE_UPDATE_9 DATE, "  // 97. Fecha de actualización del precio
*/
        "SUPPLIER_DEFAULT VARCHAR(10), "                            // 98. CODE proveedor por defecto

        "CREATEDAT DATE DEFAULT CURRENT_DATE, "                     // 25. Fecha de creación
        "CREATEDBY VARCHAR(100)"

        ");";

//------------ COMPOSICIÓN DE UNIDADES DE OBRA ------------------------------
const QString tElemComp = "CREATE TABLE ELEMENTCOMPOSITION ("
        "ID                 INTEGER,"                               // 00. Número de línea
        "CODE               VARCHAR(20) NOT NULL, "                 // 01. ID de la Unidad de obra
        "ELEMENT_CODE       VARCHAR(20) NOT NULL, "                 // 02. ID del elemento
        "ELEMENT_AMOUNT     FLOAT, "                                // 03. Cantidad del elemento

        "CREATEDAT          DATE DEFAULT CURRENT_DATE, "            // 04. Fecha de su creación
        "CREATEDBY          VARCHAR (100),"                         // 05. Fecha de su creación

        "PRIMARY KEY(ID, CODE, ELEMENT_CODE));";

//------------ PROVEEDOR DEL ELEMENTO -------------------------------------------
const QString tSupplier = "CREATE TABLE Supplier ("
        "ELEMENT_CODE       VARCHAR(20) NOT NULL, "                 // 00. Code del elemento

        "THIRD_CODE         VARCHAR(20) NOT NULL, "                 // 01. Code del proveedor
        "THIRD_NAME         VARCHAR(60), "                          // 03. Nombre del proveedor

        "REFERENCE          VARCHAR(20), "                          // 04. Ref. del elemento que tiene el proveedor
        "REAL_PRICE         FLOAT, "                                // 05. PVP
        "DISCOUNT           FLOAT, "                                // 06. Descuento
        "PURCHASE_PRICE     FLOAT, "                                // 07. Precio compra
        "MINIMUM_AMOUNT     FLOAT, "                                // 08. Cantidad mínima de pedido
        "DATE_UPDATE        DATE, "                                 // 09. Fecha de actualización del precio

        "CREATEDAT          DATE DEFAULT CURRENT_DATE, "            // 10. Fecha de creación
        "CREATEDBY          VARCHAR(100), "

        "PRIMARY KEY(ELEMENT_CODE, THIRD_CODE)"
        ");";

//----------------------- FORMAS -------------------------------------------
const QString tForma = "CREATE TABLE FORM ("
        "ID                 VARCHAR(10) NOT NULL UNIQUE, "          // 00. Abreviación de la forma
        "DESCRIPTION        VARCHAR(60) NOT NULL, "                 // 01. Descripción más amplia
        "PRIMARY KEY(ID));";

  //----------------------- FAMILIAS DE PROVEEDORES ---------------------------
const QString tFamProv = "CREATE TABLE SUPPLIERFAMILIES ("
        "ID                 VARCHAR(10) NOT NULL UNIQUE, "          // 00. Abreviatura de la familia
        "DESCRIPTION        VARCHAR(60) NOT NULL, "                 // 01. Descripción
        "PRIMARY KEY(ID));";

  //----------------------- FAMILIAS DE CLIENTES -----------------------------
const QString tFamCli = "CREATE TABLE CUSTOMERFAMILIES ("
        "ID                 VARCHAR(10) NOT NULL UNIQUE, "          // 00. Code del elemento
        "DESCRIPTION        VARCHAR(60) NOT NULL, "                 // 00. Code del elemento
        "PRIMARY KEY(ID));";

  //----------------------- FAMILIAS DE ELEMENTOS ----------------------------
const QString tFamEle = "CREATE TABLE ELEMENTFAMILIES ("
        "ID                 VARCHAR(10) NOT NULL UNIQUE,"           // 00. Code del elemento
        "DESCRIPTION        VARCHAR(60) NOT NULL, "                 // 00. Code del elemento
        "PRIMARY KEY(ID));";

  //----------------------- UNIDADES ------------------------------------------
const QString tUnidad = "CREATE TABLE UNIT ("
        "ID                 VARCHAR(10) NOT NULL UNIQUE,"           // 00. Code del elemento
        "DESCRIPTION        VARCHAR(60) NOT NULL, "                 // 00. Code del elemento
        "PRIMARY KEY(ID));";

//---------------------- DOCUMENTOS DE VENTA - PROPUESTAS --------------------------------
const QString tPropuestaVenta = "CREATE TABLE SALEPROPOSAL ("
      "ID                 INTEGER PRIMARY KEY AUTOINCREMENT, "    // 0.  ID
      "TYPE               VARCHAR(2) NOT NULL, "                  // 1.  Tipo de documento: PR - Presu, FA - Factura,
      "CODE               VARCHAR(20) NOT NULL UNIQUE, "          // 2.  ID documento
      "TITLE              VARCHAR(100) NOT NULL, "                // 3.  Nombre documento
      "VERSION            INTEGER, "                              // 6.  Nombre proveedor

      "CUSTOMER_CODE      VARCHAR(20) NOT NULL, "                 // 4.  ID cliente
      "CUSTOMER_NAME      VARCHAR(100) NOT NULL, "                // 5.  Nombre cliente                ??
      "PROJECT_CODE       VARCHAR(20), "                          // 6.  ID del proyecto
      "PROJECT_TITLE      VARCHAR(100), "                         // 6.  Nombre proveedor                ??

      "COST               DOUBLE, "                               // 10. Precio total Compra
      "PRICE              DOUBLE, "                               // 11. Precio total Venta sin iva
      "TAX                INTEGER, "                              // 12. IVA
      "STATE              VARCHAR(10), "                          // 13. Estado
      "STATE_NUMBER       INTEGER, "                              // 14. Número del estado

      "DESCRIPTION        BLOB, "                                 // 4.  Descripción

      "CREATEDAT          DATE DEFAULT CURRENT_DATE, "            // 7.  Fecha creación
      "VALIDUNTILL        DATE DEFAULT CURRENT_DATE, "            // 8.  Valido hasta la fecha
      "DELIVERY_DATE      DATE DEFAULT CURRENT_DATE, "            // 9.  Fecha de expedición
      "CREATEDBY          VARCHAR(100)"
      ");";

const QString tDataPropuestaVenta = "CREATE TABLE SALEPROPOSALDATA ("
      "ID                 INTEGER NOT NULL, "                     // 0.  Número de la línea
      "SALEDOCUMENT_CODE  VARCHAR(20) NOT NULL, "                 // 1.  ID Documento de compra
      "VERSION            INTEGER, "                              // 6.  Nombre proveedor

      "NODEINDEX          VARCHAR(10), "                          // 2.  Indice
      "ELEMENT_CODE       VARCHAR(20), "                          // 3.  ID del elemento
      "ELEMENT_TYPE       VARCHAR(2), "                           // 4.  Tipo de elemento
      "ELEMENT_INDEX      INTEGER, "                              // 5.  Indice del elemento
      "ELEMENT_TITLE      VARCHAR(100), "                         // 6.  Título del elemento
      "ELEMENT_DESCRIPTION    BLOB, "                             // 7.  Descripción del elemento
      "ELEMENT_UNIT_AMOUNT    FLOAT, "                            // 8.  Cantidad unitaria del elemento
      "ELEMENT_TOTAL_AMOUNT   FLOAT, "                            // 9.  Cantidad total
      "ELEMENT_UNIT           VARCHAR(2), "                       // 10.  ID de la unidad
      "ELEMENT_PRICE      FLOAT, "                                // 11. Precio del elemento

      "BENEFIT            FLOAT, "                                // 12. Beneficio
      "DISCOUNT           FLOAT, "                                // 13. Descuento

      "TAX                FLOAT, "                                // 13. Descuento
      "PRINT              BOOLEAN       DEFAULT (TRUE),"          // 13. Descuento

      "CREATEDAT          DATE DEFAULT CURRENT_DATE, "            // 14. Fecha de creación
      "CREATEDBY          VARCHAR(100), "

      "PRIMARY KEY(ID, SALEDOCUMENT_CODE));";

  //---------------------- DOCUMENTOS DE VENTA --------------------------------
const QString tDocVenta = "CREATE TABLE SALEDOCUMENT ("
        "ID                 INTEGER PRIMARY KEY AUTOINCREMENT, "    // 0.  ID
        "TYPE               VARCHAR(2) NOT NULL, "                  // 1.  Tipo de documento: PR - Presu, FA - Factura,
        "CODE               VARCHAR(20) NOT NULL UNIQUE, "          // 2.  ID documento
        "TITLE              VARCHAR(100) NOT NULL, "                // 3.  Nombre documento
        "VERSION            INTEGER, "                              // 6.  Nombre proveedor

        "CUSTOMER_CODE      VARCHAR(20) NOT NULL, "                 // 4.  ID cliente
        "CUSTOMER_NAME      VARCHAR(100) NOT NULL, "                // 5.  Nombre cliente                ??
        "PROJECT_CODE       VARCHAR(20), "                          // 6.  ID del proyecto
        "PROJECT_TITLE      VARCHAR(100), "                         // 6.  Nombre proveedor                ??

        "COST               DOUBLE, "                               // 10. Precio total Compra
        "PRICE              DOUBLE, "                               // 11. Precio total Venta sin iva
        "TAX                INTEGER, "                              // 12. IVA
        "STATE              VARCHAR(10), "                          // 13. Estado
        "STATE_NUMBER       INTEGER, "                              // 14. Número del estado

        "DESCRIPTION        BLOB, "                                 // 4.  Descripción

        "CREATEDAT          DATE DEFAULT CURRENT_DATE, "            // 7.  Fecha creación
        "VALIDUNTILL            DATE DEFAULT CURRENT_DATE, "            // 8.  Valido hasta la fecha
        "DELIVERY_DATE      DATE DEFAULT CURRENT_DATE, "            // 9.  Fecha de expedición
        "CREATEDBY          VARCHAR(100)"
        ");";

const QString tDataDocVenta = "CREATE TABLE SALEDOCUMENTDATA ("
        "ID                 INTEGER NOT NULL, "                     // 0.  Número de la línea
        "SALEDOCUMENT_CODE  VARCHAR(20) NOT NULL, "                 // 1.  ID Documento de compra
        "VERSION            INTEGER, "                              // 6.  Nombre proveedor

        "NODEINDEX          VARCHAR(10), "                          // 2.  Indice
        "ELEMENT_CODE       VARCHAR(20), "                          // 3.  ID del elemento
        "ELEMENT_TYPE       VARCHAR(2), "                           // 4.  Tipo de elemento
        "ELEMENT_INDEX      INTEGER, "                              // 5.  Indice del elemento
        "ELEMENT_TITLE      VARCHAR(100), "                         // 6.  Título del elemento
        "ELEMENT_DESCRIPTION    BLOB, "                             // 7.  Descripción del elemento
        "ELEMENT_UNIT_AMOUNT    FLOAT, "                            // 8.  Cantidad unitaria del elemento
        "ELEMENT_TOTAL_AMOUNT   FLOAT, "                            // 9.  Cantidad total
        "ELEMENT_UNIT           VARCHAR(2), "                       // 10.  ID de la unidad
        "ELEMENT_PRICE      FLOAT, "                                // 11. Precio del elemento

        "BENEFIT            FLOAT, "                                // 12. Beneficio
        "DISCOUNT           FLOAT, "                                // 13. Descuento

        "CREATEDAT          DATE DEFAULT CURRENT_DATE, "            // 14. Fecha de creación
        "CREATEDBY          VARCHAR(100), "

        "PRIMARY KEY(ID, SALEDOCUMENT_CODE));";

  //---------------------- DOCUMENTOS DE COMPRA --------------------------------
const QString tDocCompra = "CREATE TABLE BUYDOCUMENT ("
        "ID                 INTEGER PRIMARY KEY AUTOINCREMENT, "       // 0.  ID
        "TYPE               VARCHAR(2)	NOT NULL, "                  // 1.  Tipo de documento:
        "CODE               VARCHAR(20) NOT NULL, "                  // 2.  Código documento
        "SUPPLIER_CODE      VARCHAR(20) NOT NULL, "                  // 3.  Código proveedor
        "SUPPLIER_NAME      VARCHAR(100) NOT NULL, "                  // 4.  Nombre proveedor
        "PROJECT_CODE       VARCHAR(20), "                           // 5.  ID del proyecto
        "PROJECT_NAME       VARCHAR(100), "                           // 6.  Referecia del proveedor(en caso de albarán o factura)

        "REFERENCE          VARCHAR(50), "                           // 6.  Referecia del proveedor(en caso de albarán o factura)

        "CREATEDAT          DATE DEFAULT CURRENT_DATE, "           // 7.  Fecha creación
        "VALIDUNTILL            DATE DEFAULT CURRENT_DATE, "           // 8.  Fecha de entrega

        "PRICE              DOUBLE, "                            // 9.  Precio total Compra
        //"dcPVP              DOUBLE, "                            // 10. Precio total Compra sin iva
        "TAX                INTEGER, "                              // 11. IVA

        "DESCRIPTION        BLOB, "   // 4.  Descripción
        "CREATEDBY          VARCHAR(100) "
        ");";

const QString tDataDocCompra = "CREATE TABLE BUYDOCUMENTDATA ("
        "ID                 INTEGER NOT NULL, "                             // 0.  ID linea
        "BUYDOCUMENT_CODE	VARCHAR(10)	NOT NULL, "             // 1.  ID Documento de compra
        "ELEMENT_CODE       VARCHAR(20), "                          // 2.  ID del elemento
        "ELEMENT_SUPPLIER_CODE  VARCHAR(20), "                 // 3.  ID del elemento que tiene el proveedor
        "ELEMENT_NAME       VARCHAR(100), "                          // 4.  Descripción del elemento
        "ELEMENT_MANUFACTURER   VARCHAR(40), "                  // 5.  Fabricante
        "ELEMENT_AMOUNT     FLOAT, "                              // 6.  Cantidad
        "ELEMENT_UNIT       VARCHAR(2), "                           // 7.  ID de la unidad
        "ELEMENT_REAL_PRICE FLOAT, "                          // 8.  PVP de compra del elemento
        "ELEMENT_DISCOUNT   FLOAT, "                            // 9.  Descuento
        "ELEMENT_PURCHASE_PRICE FLOAT, "                      // 10. Precio de Compra del elemento
        "DELIVERY_DATE DATE, "                                // 11. Fecha de Entrega del elemento

        "CREATEDAT DATE DEFAULT CURRENT_DATE, "           // 14. Fecha de creación
        "CREATEDBY VARCHAR(100), "

        "PRIMARY KEY(ID, BUYDOCUMENT_CODE));";

  //----------------------- PROYECTO -----------------------------------------
const QString tProyecto = "CREATE TABLE PROJECT ("
    "ID	INTEGER PRIMARY KEY AUTOINCREMENT, "           // 0.  ID
    "CODE	VARCHAR(20) NOT NULL, "                      // 1.  ID
    "TITLE	VARCHAR(100) NOT NULL, "                   // 2.  Título
    "CUSTOMER_CODE	VARCHAR(10) NOT NULL, "            // 3.  ID Cliente
    "CUSTOMER_NAME	VARCHAR(60) NOT NULL, "            // 4.  Nombre del cliente
    "START_DATE	DATE DEFAULT CURRENT_DATE, "           // 5.  Fecha de Inicio
    "DURATION	DATE, "                                  // 6.  Fecha de Inicio
    "STATE	VARCHAR(10), "                             // 7.  Estado

    // Dirección de la obra
    "CONTACT	VARCHAR(60), "                           // 8.  Contacto
    "ADDRESS1	VARCHAR(40), "                           // 9.  Dir L1
    "ADDRESS2	VARCHAR(40), "                           // 10.  Dir L2
    "POSTCODE	VARCHAR(9), "                            // 11. CP
    "CITY	VARCHAR(80), "                               // 12. Ciudad
    "PHONE	VARCHAR(20), "                             // 13. Telefono
    "MOBILE	VARCHAR(20), "                             // 14. Movil
    "EMAIL	VARCHAR(60), "                             // 15. e-mail

    "pyGantt BLOB"                                     // 16. Imagen

    "CREATEDAT DATE DEFAULT CURRENT_DATE, "    // 25. Fecha de creación
    "CREATEDBY VARCHAR(100)"
    ");";

const QString tProjectControl = "CREATE TABLE PROJECTCONTROL ("
    "ID	INTEGER PRIMARY KEY AUTOINCREMENT, "           // 01.  ID
    "pcPYCODE	VARCHAR(20) NOT NULL, "                  // 02.  ID
    "pcELID	VARCHAR(20) NOT NULL, "                    // 03.  ID
    "pcELTITLE VARCHAR(100) NOT NULL, "                // 04.  ID Cliente
    "pcELTOTAL	FLOAT, "                               // 05.  Nombre del cliente
    "pcELINSTALLED FLOAT, "                            // 06.  Fecha de Inicio
    "pcELREST	FLOAT, "                                 // 07.  Fecha de Inicio
    "pcELUNIT	VARCHAR(2), "                            // 08.  Estado
    "pcELDATE	DATE DEFAULT CURRENT_DATE, "             // 09.  Estado
    "pcELTYPE VARCHAR(3), "
    "pcELNODEINDEX INTEGER, "
    "pcTASK VARCHAR(50), "

    "pcCREATEDBY VARCHAR(100), "
    "CREATEDAT DATETIME DEFAULT CURRENT_DATE"
    ");";

  //----------------------- TRABAJADOR ---------------------------------------
const QString tTrabajador = "CREATE TABLE EMPLOYEE ("
    "ID INTEGER PRIMARY KEY AUTOINCREMENT, "           // 01. ID
    "SURNAME VARCHAR(60) NOT NULL, "                   // 02. Apellidos
    "NAME VARCHAR(60) NOT NULL, "                      // 03. Nombre
    "STATE	BOOLEAN	DEFAULT FALSE, "                   // 04. Activo o inactivo
    "CATEGORY VARCHAR(30), "                           // 05. Categoría
    "PRICEPERHOUR	FLOAT, "                             // 06. Precio Hora
    "NOTES BLOB,"                                      // 07. Notas
    "PICTURE BLOB,"

    "CREATEDAT DATE DEFAULT CURRENT_DATE, "    // 25. Fecha de creación
    "CREATEDBY VARCHAR(100)"
    ");";

  //----------------------- CONTACTOS -----------------------------------------
const QString tContact = "CREATE TABLE CONTACT ("
    "coID	INTEGER PRIMARY KEY AUTOINCREMENT, "         // 01. ID
    "coCode	VARCHAR(20) NOT NULL, "                    // 02. Code
    "coNombre	VARCHAR(60) NOT NULL, "                  // 03. Nombre
    "coApellido	VARCHAR(60) NOT NULL, "                // 04. Apellidos
    "coForma	VARCHAR(10), "                           // 05. Forma

    "coPuesto	VARCHAR(20), "                           // 06. Puesto
    "coclCode	VARCHAR(20), "                           // 07. Código Empresa
    "coclNom VARCHAR(100), "                            // 08. Nombre Empresa
    "coTel	VARCHAR(20), "                             // 09. Teléfono fijo
    "coMovil	VARCHAR(20), "                           // 10. Teléfono móvil
    "coFax	VARCHAR(20), "                             // 11. Fax
    "coEMail	VARCHAR(60),"                            // 12. e-mail
    "coImage BLOB,"                                    // 13. Imagen

    "CREATEDAT DATE DEFAULT CURRENT_DATE, "    // 25. Fecha de creación
    "CREATEDBY VARCHAR(100)"
    ");";



const QStringList dbTables = {tDBInfo, tEmpresaInfo, tThird, tElemento, tElemComp, tUnidad, tPropuestaVenta, tDataPropuestaVenta,
    tDocVenta, tDataDocVenta, tDocCompra, tDataDocCompra, tContact};

const QStringList dbTableNames = {"DBINFO", "ENTERPRISESINFO", "THIRD", "ELEMENT", "ELEMENTCOMPOSITION", "UNIT", "SALEPROPOSAL", "SALEPROPOSALDATA",
    "SALEDOCUMENT", "SALEDOCUMENTDATA", "BUYDOCUMENT", "BUYDOCUMENTDATA", "CONTACT"};

#endif // SQLTABLE_H
