-- ===========================================================================
-- Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
-- Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
-- Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
-- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
-- Copyright (C) 2014      Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
--
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
--
-- ===========================================================================


create table llx_facture
(
  rowid					integer AUTO_INCREMENT PRIMARY KEY,

  ref					varchar(30)        NOT NULL,			-- invoice reference number
  entity				integer  DEFAULT 1 NOT NULL,			-- multi company id

  ref_ext				varchar(255),							-- reference into an external system (not used by dolibarr)
  ref_client			varchar(255),							-- reference of invoice on customer side

  type					smallint DEFAULT 0 NOT NULL,			-- type of invoice (standard, credit note, ...)
  subtype				smallint DEFAULT NULL,					-- subtype of invoice (some countries need a subtype to classify invoices)
  fk_soc				integer            NOT NULL,			-- ID of thirdparty (customer)

  datec					datetime,								-- date de creation de la facture
  datef					date,									-- date invoice
  date_pointoftax		date DEFAULT NULL,									-- date point of tax (for GB)
  date_valid			date,									-- date validation
  tms					timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,								-- last modification date
  date_closing			datetime,								-- date de cloture
  paye					smallint DEFAULT 0 NOT NULL,			-- 1 if invoice is payed completely. Deprecated. Use instead statut = 2 and close_code is null or = ''

  remise_percent		real     DEFAULT 0,						-- remise relative (deprecated, not used)
  remise_absolue		real     DEFAULT 0,						-- remise absolue (deprecated, not used)
  remise				real     DEFAULT 0,						-- remise totale calculee (deprecated, not used)

  close_code			varchar(16),							-- Code for reason of closing without complete payment. '' if payment is complete.
  close_missing_amount	double(24,8),							-- TODO Amount missing when closing with a not complete payment. 0 if payment is complete.
  close_note			varchar(128),							-- Comment on closing without complete payment

  total_tva				double(24,8)     DEFAULT 0,				-- amount total tva apres remise totale
  localtax1				double(24,8)     DEFAULT 0,				-- amount total localtax1
  localtax2				double(24,8)     DEFAULT 0,				-- amount total localtax2
  revenuestamp          double(24,8)     DEFAULT 0,				-- amount total revenuestamp
  total_ht				double(24,8)     DEFAULT 0,				-- amount total ht apres remise totale
  total_ttc				double(24,8)     DEFAULT 0,				-- amount total ttc apres remise totale

  fk_statut				smallint DEFAULT 0 NOT NULL,			-- 2 means closed, but it may be closed payed partially if close_code has a code value.

  fk_user_author		integer,								-- user making creation
  fk_user_modif         integer,                                -- user making last change
  fk_user_valid			integer,								-- user validating
  fk_user_closing		integer,								-- user closing

  module_source			varchar(32),							-- name of module when invoice generated by a dedicated module (POS, ecommerce...)
  pos_source			varchar(32),							-- numero of POS terminal when order is generated by a POS module, IDsession@IDwebsite when invoice is generated for a website ecommerce.
  pos_print_counter     integer DEFAULT 0,						-- counter used to track how many times the invoice/receipt was downloaded or printed.
  email_sent_counter    integer DEFAULT 0,						-- counter used to track how many times the invoice/receipt was sent by email.

  fk_fac_rec_source		integer,								-- facture rec source
  fk_facture_source		integer,								-- facture origin if credit notes or replacement invoice
  fk_projet				integer DEFAULT NULL,					-- project invoice is linked to
  increment				varchar(10),							-- Numero of generation if generated from recurring template invoice

  fk_account			integer,								-- bank account
  fk_currency			varchar(3),								-- currency code

  fk_cond_reglement		integer  DEFAULT 1 NOT NULL,			-- default payment term (30 days, end of month...)
  fk_mode_reglement		integer,								-- default payment mode (cash, card, cheque, ...)
  date_lim_reglement	date,									-- due date

  payment_reference     varchar(25),                            -- SEPA and any other national or custom payment id (use case for this field is not clear)
  fk_thirdparty_rib_id	integer NULL,							-- ID of thirdparty payment mode in llx_societe_rib
  dispute_status		integer DEFAULT 0,						-- set to 1 if a dispute on a payment of invoice is open

  note_private			text,
  note_public			text,

  model_pdf				varchar(255),
  last_main_doc			varchar(255),							-- relative filepath+filename of last main generated document
  fk_input_reason       integer DEFAULT NULL,                   -- id coming from c_input_reason

  fk_incoterms          integer,								-- for incoterms
  location_incoterms    varchar(255),							-- for incoterms

  fk_transport_mode     integer,								-- for intracomm report

  prorata_discount		real DEFAULT NULL,  					-- % of the prorata discount (to know how to add prorata discount lines for each vat rate in the invoice)

  situation_cycle_ref integer,   -- situation cycle reference. A key that is similar for all the serie.
  situation_counter   smallint,  -- situation counter. The number into the serie: 1, 2, ...
  situation_final     smallint,  -- 0 by default, 1 it if is the final invoice.

  retained_warranty							real DEFAULT NULL,  		-- % of the retained warranty (to calculate the amount - on the inc tax basis - to pay later by getRetainedWarrantyAmount)
  retained_warranty_amount 					double(24,8) DEFAULT NULL,	-- to store the amount of the retained warranty once calculated and rounded from the % - duplicate, not reliable, just for info
  retained_warranty_date_limit				date DEFAULT NULL,			-- when we can request the retained warranty (used to update the flag payment late or not)
  retained_warranty_fk_cond_reglement		integer  DEFAULT NULL,		-- payment condition of retained warranty

  import_key			varchar(14),
  extraparams			varchar(255),							-- for other parameters with json format
  is_also_delivery_note tinyint DEFAULT 0 NOT NULL,             -- 0=default, 1=can act also as a delivery note (for countries that accept invoices as delivery notes)

  fk_multicurrency		integer,
  multicurrency_code		varchar(3),
  multicurrency_tx			double(24,8) DEFAULT 1,
  multicurrency_total_ht	double(24,8) DEFAULT 0,
  multicurrency_total_tva	double(24,8) DEFAULT 0,
  multicurrency_total_ttc	double(24,8) DEFAULT 0,
  ip  varchar(250) --ip used to create record (for public submission page)
)ENGINE=innodb;
