@ -6,7 +6,10 @@ import static de.srsoftware.tools.jdbc.Condition.*;
				@@ -6,7 +6,10 @@ import static de.srsoftware.tools.jdbc.Condition.*;
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.tools.jdbc.Query.* ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.tools.jdbc.Query.SelectQuery.ALL ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.Constants.* ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.Constants.FIELD_COMPANY_ID ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.Field.* ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.Field.COMPANY_ID ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.Field.TAX ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.Field.UNIT ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.exceptions.UmbrellaException.databaseException ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.model.Document.DEFAULT_THOUSANDS_SEPARATOR ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import static  de.srsoftware.umbrella.core.model.Document.State ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -51,7 +54,7 @@ public class SqliteDb implements DocumentDb{
				@@ -51,7 +54,7 @@ public class SqliteDb implements DocumentDb{
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  void  createTableCompanySettings ( )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  sql  =  "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL, {2} INT NOT NULL, {3} TEXT DEFAULT \"A\", {4} TEXT DEFAULT NULL, {5} INT NOT NULL DEFAULT 1, PRIMARY KEY ({1}, {2}))" ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( sql , TABLE_COMPANY_SETTINGS ,  FIELD_ COMPANY_ID, FIELD_ DOC_TYPE_ID, FIELD_ TYPE_PREFIX, FIELD_ TYPE_SUFFIX, FIELD_ TYPE_NUMBER) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( sql , TABLE_COMPANY_SETTINGS ,  COMPANY_ID , DOC_TYPE_ID , TYPE_PREFIX , TYPE_SUFFIX , TYPE_NUMBER ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . execute ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  catch  ( SQLException  e )  {   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -63,7 +66,7 @@ public class SqliteDb implements DocumentDb{
				@@ -63,7 +66,7 @@ public class SqliteDb implements DocumentDb{
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  void  createTableCustomerPrices ( )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  sql  =  "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL, {2} VARCHAR(255), {3} VARCHAR(50), {4} INTEGER)" ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( sql , TABLE_PRICES ,  FIELD_ COMPANY_ID, FIELD_ CUSTOMER_NUMBER,  FIELD_ ITEM_CODE, FIELD_ PRICE) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( sql , TABLE_PRICES ,  COMPANY_ID , CUSTOMER_NUMBER ,  ITEM_CODE , PRICE ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . execute ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  catch  ( SQLException  e )  {   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -75,7 +78,7 @@ public class SqliteDb implements DocumentDb{
				@@ -75,7 +78,7 @@ public class SqliteDb implements DocumentDb{
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  void  createTableCustomerSettings ( )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  sql  =  "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL, {2} INT NOT NULL, {3} VARCHAR(255), {4} TEXT, {5} TEXT, {6} TEXT, PRIMARY KEY ({1}, {2}, {3}))" ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( sql , TABLE_CUSTOMER_SETTINGS ,  FIELD_ COMPANY_ID, FIELD_ DOC_TYPE_ID, FIELD_ CUSTOMER_NUMBER, FIELD_ DEFAULT_HEADER, FIELD_ DEFAULT_FOOTER, FIELD_ DEFAULT_MAIL) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( sql , TABLE_CUSTOMER_SETTINGS ,  COMPANY_ID , DOC_TYPE_ID , CUSTOMER_NUMBER , DEFAULT_HEADER , DEFAULT_FOOTER , DEFAULT_MAIL ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . execute ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  catch  ( SQLException  e )  {   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -108,7 +111,7 @@ CREATE TABLE IF NOT EXISTS {0} (
				@@ -108,7 +111,7 @@ CREATE TABLE IF NOT EXISTS {0} (
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						{ 18 }  VARCHAR ( 255 ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						{ 19 }  VARCHAR ( 255 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					) "" " ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							createTable  =  format ( createTable , TABLE_DOCUMENTS ,  ID ,  FIELD_ TYPE_ID,  FIELD_ COMPANY_ID,  NUMBER ,  DATE ,  STATE ,  FIELD_ TEMPLATE_ID,  FIELD_ DELIVERY_DATE, FIELD_ HEAD, FIELD_F OOTER , FIELD_ CURRENCY,  SENDER , FIELD_ TAX_NUMBER, FIELD_ BANK_ACCOUNT, FIELD_ COURT, FIELD_ CUSTOMER, FIELD_ CUSTOMER_NUMBER, FIELD_ CUSTOMER_TAX_NUMBER, FIELD_ CUSTOMER_EMAIL) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							createTable  =  format ( createTable , TABLE_DOCUMENTS ,  ID ,  TYPE_ID ,  COMPANY_ID ,  NUMBER ,  DATE ,  STATE ,  TEMPLATE_ID ,  DELIVERY_DATE , HEAD , FOOTER , CURRENCY ,  SENDER , TAX_NUMBER , BANK_ACCOUNT , COURT , CUSTOMER , CUSTOMER_NUMBER , CUSTOMER_TAX_NUMBER , CUSTOMER_EMAIL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( createTable ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . execute ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -122,7 +125,7 @@ CREATE TABLE IF NOT EXISTS {0} (
				@@ -122,7 +125,7 @@ CREATE TABLE IF NOT EXISTS {0} (
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  void  createTableDocumentTypes ( )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  createTable  =  "CREATE TABLE IF NOT EXISTS {0} ({1} INTEGER PRIMARY KEY, {2} INT, {3} VARCHAR(255) NOT NULL)" ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( createTable , TABLE_DOCUMENT_TYPES ,  ID , FIELD_ NEXT_TYPE,  NAME ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( createTable , TABLE_DOCUMENT_TYPES ,  ID , NEXT_TYPE ,  NAME ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . execute ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  catch  ( SQLException  e )  {   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -147,7 +150,7 @@ CREATE TABLE IF NOT EXISTS {0} (
				@@ -147,7 +150,7 @@ CREATE TABLE IF NOT EXISTS {0} (
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						{ 11 }  BOOLEAN  DEFAULT  0   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					)  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					"" " ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							sql  =  format ( sql , TABLE_POSITIONS , FIELD_ DOCUMENT_ID, FIELD_ POS,  FIELD_ ITEM_CODE, FIELD_ AMOUNT, FIELD_ UNIT,  TITLE ,  DESCRIPTION , FIELD_ PRICE, FIELD_ TAX, FIELD_ TIME_ID,  OPTIONAL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							sql  =  format ( sql , TABLE_POSITIONS , DOCUMENT_ID , POS ,  ITEM_CODE , AMOUNT , UNIT ,  TITLE ,  DESCRIPTION , PRICE , TAX , TIME_ID ,  OPTIONAL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( sql ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . execute ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -191,7 +194,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -191,7 +194,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  void  createTableTemplates ( )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  createTable  =  "CREATE TABLE IF NOT EXISTS {0} ({1} INTEGER PRIMARY KEY, {2} INT NOT NULL, {3} VARCHAR(255) NOT NULL, {4} BLOB)" ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( createTable , TABLE_TEMPLATES ,  ID ,  FIELD_ COMPANY_ID,  NAME ,  TEMPLATE ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( format ( createTable , TABLE_TEMPLATES ,  ID ,  COMPANY_ID ,  NAME ,  TEMPLATE ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . execute ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  catch  ( SQLException  e )  {   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -208,7 +211,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -208,7 +211,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								String  number  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( rs . next ( ) )  number  =  rs . getString ( NUMBER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								delete ( ) . from ( TABLE_POSITIONS ) . where ( FIELD_ DOCUMENT_ID, equal ( docId ) ) . execute ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								delete ( ) . from ( TABLE_POSITIONS ) . where ( DOCUMENT_ID , equal ( docId ) ) . execute ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								delete ( ) . from ( TABLE_DOCUMENTS ) . where ( ID , equal ( docId ) ) . execute ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								db . setAutoCommit ( true ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( number  ! =  null )  return  number ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -222,8 +225,8 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -222,8 +225,8 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						public  Long  dropPosition ( long  docId ,  long  pos )  throws  UmbrellaException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								db . setAutoCommit ( false ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								delete ( ) . from ( TABLE_POSITIONS ) . where ( FIELD_ DOCUMENT_ID, equal ( docId ) ) . where ( FIELD_ POS, equal ( pos ) ) . execute ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  sql  =  format ( "UPDATE {0} SET {1} = {1}-1 WHERE {2} = ? AND {1} > ?" , TABLE_POSITIONS , FIELD_ POS, FIELD_ DOCUMENT_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								delete ( ) . from ( TABLE_POSITIONS ) . where ( DOCUMENT_ID , equal ( docId ) ) . where ( POS , equal ( pos ) ) . execute ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  sql  =  format ( "UPDATE {0} SET {1} = {1}-1 WHERE {2} = ? AND {1} > ?" , TABLE_POSITIONS , POS , DOCUMENT_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								LOG . log ( DEBUG , sql . replaceFirst ( "\\?" , docId + "" ) . replace ( "?" , pos + "" ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  db . prepareStatement ( sql ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								stmt . setLong ( 1 , docId ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -241,7 +244,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -241,7 +244,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						@Override   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						public  CompanySettings  getCompanySettings ( long  companyId ,  Type  docType )  throws  UmbrellaException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( ALL ) . from ( TABLE_COMPANY_SETTINGS ) . where ( FIELD_ COMPANY_ID, equal ( companyId ) ) . where ( FIELD_ DOC_TYPE_ID, equal ( docType . id ( ) ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( ALL ) . from ( TABLE_COMPANY_SETTINGS ) . where ( COMPANY_ID , equal ( companyId ) ) . where ( DOC_TYPE_ID , equal ( docType . id ( ) ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								CompanySettings  settings  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( rs . next ( ) )  settings  =  CompanySettings . of ( rs ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -267,9 +270,9 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -267,9 +270,9 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						@Override   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						public  Long  getCustomerPrice ( long  company ,  String  customer ,  String  itemCode )  throws  UmbrellaException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( FIELD_ PRICE) . from ( TABLE_PRICES ) . where ( FIELD_ COMPANY_ID, equal ( company ) ) . where ( FIELD_ CUSTOMER_NUMBER, equal ( customer ) ) . where ( FIELD_ ITEM_CODE, equal ( itemCode ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( PRICE ) . from ( TABLE_PRICES ) . where ( COMPANY_ID , equal ( company ) ) . where ( CUSTOMER_NUMBER , equal ( customer ) ) . where ( ITEM_CODE , equal ( itemCode ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								Long  price  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( rs . next ( ) )  price  =  rs . getLong ( FIELD_ PRICE) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( rs . next ( ) )  price  =  rs . getLong ( PRICE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( price  ! =  null )  return  price ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  catch  ( SQLException  e )  {   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -281,7 +284,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -281,7 +284,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						@Override   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						public  CustomerSettings  getCustomerSettings ( long  companyId ,  Type  docType ,  String  customerId )  throws  UmbrellaException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( ALL ) . from ( TABLE_CUSTOMER_SETTINGS ) . where ( FIELD_ COMPANY_ID, equal ( companyId ) ) . where ( FIELD_ DOC_TYPE_ID, equal ( docType . id ( ) ) ) . where ( FIELD_ CUSTOMER_NUMBER, equal ( customerId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( ALL ) . from ( TABLE_CUSTOMER_SETTINGS ) . where ( COMPANY_ID , equal ( companyId ) ) . where ( DOC_TYPE_ID , equal ( docType . id ( ) ) ) . where ( CUSTOMER_NUMBER , equal ( customerId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								CustomerSettings  settings  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( rs . next ( ) )  settings  =  CustomerSettings . of ( rs ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -314,10 +317,10 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -314,10 +317,10 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						public  Map < Long ,  Map < Long ,  String > >  docReferencedByTimes ( Set < Long >  timeIds )  throws  UmbrellaException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  map  =  new  HashMap < Long ,  Map < Long ,  String > > ( ) ;  // Map ( timeId → Map ( docId → name ))
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( FIELD_ TIME_ID, FIELD_ DOCUMENT_ID, NUMBER ) . from ( TABLE_POSITIONS ) . leftJoin ( FIELD_ DOCUMENT_ID, TABLE_DOCUMENTS , ID ) . where ( FIELD_ TIME_ID, in ( timeIds . toArray ( ) ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( TIME_ID , DOCUMENT_ID , NUMBER ) . from ( TABLE_POSITIONS ) . leftJoin ( DOCUMENT_ID , TABLE_DOCUMENTS , ID ) . where ( TIME_ID , in ( timeIds . toArray ( ) ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								while  ( rs . next ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  timeId  =  rs . getLong ( FIELD_ TIME_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  docId   =  rs . getLong ( FIELD_ DOCUMENT_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  timeId  =  rs . getLong ( TIME_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  docId   =  rs . getLong ( DOCUMENT_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  number  =  rs . getString ( NUMBER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									map . computeIfAbsent ( timeId , k  - >  new  HashMap < > ( ) ) . put ( docId , number ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								}   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -338,9 +341,9 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -338,9 +341,9 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  query  =  Query . select ( ALL ) . from ( TABLE_DOCUMENTS ) . where ( COMPANY_ID , in ( companyIds . toArray ( ) ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( fulltext )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									for  ( var  key  :  keys )  query . where ( format ( "CONCAT({0},\" \",{1},\" \",{2},\" \",{3},\" \",{4},\" \",{5},\" \",{6},\" \",{7},\" \",{8},\" \",{9})" , NUMBER , FIELD_ HEAD, FIELD_ FOOTER, SENDER , FIELD_ TAX_NUMBER, FIELD_ BANK_ACCOUNT, FIELD_ CUSTOMER, FIELD_ CUSTOMER_NUMBER, FIELD_ CUSTOMER_TAX_NUMBER, FIELD_ CUSTOMER_EMAIL) , like ( "%" + key + "%" ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									for  ( var  key  :  keys )  query . where ( format ( "CONCAT({0},\" \",{1},\" \",{2},\" \",{3},\" \",{4},\" \",{5},\" \",{6},\" \",{7},\" \",{8},\" \",{9})" , NUMBER , HEAD , FOOTER , SENDER , TAX_NUMBER , BANK_ACCOUNT , CUSTOMER , CUSTOMER_NUMBER , CUSTOMER_TAX_NUMBER , CUSTOMER_EMAIL ) , like ( "%" + key + "%" ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								}  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									for  ( var  key  :  keys )  query . where ( format ( "CONCAT({0},\" \",{1},\" \",{2},\" \",{3},\" \",{4})" , NUMBER , FIELD_ HEAD, FIELD_ FOOTER, SENDER , FIELD_ CUSTOMER) , like ( "%" + key + "%" ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									for  ( var  key  :  keys )  query . where ( format ( "CONCAT({0},\" \",{1},\" \",{2},\" \",{3},\" \",{4})" , NUMBER , HEAD , FOOTER , SENDER , CUSTOMER ) , like ( "%" + key + "%" ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  query . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  map  =  new  HashMap < Long , Document > ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -349,10 +352,10 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -349,10 +352,10 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( fulltext ) {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  additionalDocIds  =  new  HashSet < Long > ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									query  =  select ( FIELD_ DOCUMENT_ID) . from ( TABLE_POSITIONS ) . leftJoin ( FIELD_ DOCUMENT_ID, TABLE_DOCUMENTS , ID ) . where ( COMPANY_ID , in ( companyIds . toArray ( ) ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									for  ( var  key  :  keys )  query . where ( format ( "CONCAT({0},\" \",{1},\" \",{2},\" \",{3})" , FIELD_ ITEM_CODE, UNIT , TITLE , DESCRIPTION ) , like ( "%" + key + "%" ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									query  =  select ( DOCUMENT_ID ) . from ( TABLE_POSITIONS ) . leftJoin ( DOCUMENT_ID , TABLE_DOCUMENTS , ID ) . where ( COMPANY_ID , in ( companyIds . toArray ( ) ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									for  ( var  key  :  keys )  query . where ( format ( "CONCAT({0},\" \",{1},\" \",{2},\" \",{3})" , ITEM_CODE , UNIT , TITLE , DESCRIPTION ) , like ( "%" + key + "%" ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									rs  =  query . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									while  ( rs . next ( ) )  additionalDocIds . add ( rs . getLong ( FIELD_ DOCUMENT_ID) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									while  ( rs . next ( ) )  additionalDocIds . add ( rs . getLong ( DOCUMENT_ID ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									additionalDocIds . removeAll ( map . keySet ( ) ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -363,9 +366,9 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -363,9 +366,9 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  Query . select ( ALL ) . from ( TABLE_POSITIONS ) . where ( FIELD_ DOCUMENT_ID, in ( map . keySet ( ) . toArray ( ) ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  Query . select ( ALL ) . from ( TABLE_POSITIONS ) . where ( DOCUMENT_ID , in ( map . keySet ( ) . toArray ( ) ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								while  ( rs . next ( ) ) {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  docId  =  rs . getLong ( FIELD_ DOCUMENT_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  docId  =  rs . getLong ( DOCUMENT_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  position  =  toPosition ( rs ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									map . get ( docId ) . positions ( ) . add ( position ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									position . clean ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -386,14 +389,14 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -386,14 +389,14 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								while  ( rs . next ( ) )  types . put ( rs . getInt ( ID ) , toType ( rs ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  Query . select ( ALL ) . from ( TABLE_DOCUMENTS ) . where ( FIELD_ COMPANY_ID, equal ( companyId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  Query . select ( ALL ) . from ( TABLE_DOCUMENTS ) . where ( COMPANY_ID , equal ( companyId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  map  =  new  HashMap < Long , Document > ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								while  ( rs . next ( ) )  map . put ( rs . getLong ( ID ) , toDoc ( rs , types ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  Query . select ( ALL ) . from ( TABLE_POSITIONS ) . where ( FIELD_ DOCUMENT_ID, in ( map . keySet ( ) . toArray ( ) ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  Query . select ( ALL ) . from ( TABLE_POSITIONS ) . where ( DOCUMENT_ID , in ( map . keySet ( ) . toArray ( ) ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								while  ( rs . next ( ) ) {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  docId  =  rs . getLong ( FIELD_ DOCUMENT_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  docId  =  rs . getLong ( DOCUMENT_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  position  =  toPosition ( rs ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									map . get ( docId ) . positions ( ) . add ( position ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									position . clean ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -428,14 +431,14 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -428,14 +431,14 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								while  ( rs . next ( ) )  types . put ( rs . getInt ( ID ) , toType ( rs ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  Query . select ( ALL ) . from ( TABLE_DOCUMENTS ) . leftJoin ( FIELD_ TEMPLATE_ID, TABLE_TEMPLATES ,  ID ) . where ( TABLE_DOCUMENTS + "." +  ID , equal ( docId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs  =  Query . select ( ALL ) . from ( TABLE_DOCUMENTS ) . leftJoin ( TEMPLATE_ID , TABLE_TEMPLATES ,  ID ) . where ( TABLE_DOCUMENTS + "." +  ID , equal ( docId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								Document  doc  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								while  ( rs . next ( ) )  doc  =  toDoc ( rs , types ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( doc  ! =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  positions  =  doc . positions ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									rs  =  Query . select ( ALL ) . from ( TABLE_POSITIONS ) . where ( FIELD_ DOCUMENT_ID,  equal ( docId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									rs  =  Query . select ( ALL ) . from ( TABLE_POSITIONS ) . where ( DOCUMENT_ID ,  equal ( docId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									while  ( rs . next ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										var  position  =  toPosition ( rs ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										positions . add ( position ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -456,7 +459,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -456,7 +459,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  settings  =  getCompanySettings ( companyId , type ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  numbers  =  new  HashSet < String > ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( NUMBER ) . from ( TABLE_DOCUMENTS ) . where ( FIELD_ COMPANY_ID, equal ( companyId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( NUMBER ) . from ( TABLE_DOCUMENTS ) . where ( COMPANY_ID , equal ( companyId ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								while  ( rs . next ( ) )  numbers . add ( rs . getString ( NUMBER ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -475,7 +478,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -475,7 +478,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  typeId  =  doc . type ( ) . id ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerId  =  doc . customer ( ) . id ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							replaceInto ( TABLE_CUSTOMER_SETTINGS ,  FIELD_ COMPANY_ID,  FIELD_ DOC_TYPE_ID,  FIELD_ CUSTOMER_NUMBER,  FIELD_ DEFAULT_HEADER,  FIELD_ DEFAULT_FOOTER,  FIELD_ DEFAULT_MAIL)   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							replaceInto ( TABLE_CUSTOMER_SETTINGS ,  COMPANY_ID ,  DOC_TYPE_ID ,  CUSTOMER_NUMBER ,  DEFAULT_HEADER ,  DEFAULT_FOOTER ,  DEFAULT_MAIL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									. values ( companyId ,  typeId ,  customerId ,  settings . header ( ) ,  settings . footer ( ) ,  settings . mailText ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									. execute ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								return  settings ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -490,7 +493,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -490,7 +493,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  timestamp  =  doc . date ( ) . atStartOfDay ( UTC ) . toInstant ( ) . getEpochSecond ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  sender  =  doc . sender ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  custom  =  doc . customer ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  insertInto ( TABLE_DOCUMENTS , FIELD_ TYPE_ID, FIELD_ COMPANY_ID,  DATE ,  FIELD_ DELIVERY_DATE, FIELD_F OOTER , FIELD_ HEAD,  NUMBER ,  STATE ,  SENDER , FIELD_ TAX_NUMBER, FIELD_ BANK_ACCOUNT, FIELD_ COURT, FIELD_ CUSTOMER, FIELD_ CUSTOMER_EMAIL, FIELD_ CUSTOMER_NUMBER, FIELD_ CUSTOMER_TAX_NUMBER, FIELD_ TEMPLATE_ID, FIELD_ CURRENCY)   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  stmt  =  insertInto ( TABLE_DOCUMENTS , TYPE_ID , COMPANY_ID ,  DATE ,  DELIVERY_DATE , FOOTER , HEAD ,  NUMBER ,  STATE ,  SENDER , TAX_NUMBER , BANK_ACCOUNT , COURT , CUSTOMER , CUSTOMER_EMAIL , CUSTOMER_NUMBER , CUSTOMER_TAX_NUMBER , TEMPLATE_ID , CURRENCY )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. values ( doc . type ( ) . id ( ) , doc . companyId ( ) , timestamp , doc . delivery ( ) , doc . footer ( ) , doc . head ( ) , doc . number ( ) , doc . state ( ) . code ( ) , sender . name ( ) , sender . taxNumber ( ) , sender . bankAccount ( ) , sender . court ( ) , custom . name ( ) , custom . email ( ) , custom . id ( ) , custom . taxNumber ( ) , doc . template ( ) . id ( ) , doc . currency ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									. execute ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  stmt . getGeneratedKeys ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -513,7 +516,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -513,7 +516,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  sender  =  doc . sender ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  custom  =  doc . customer ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								update ( TABLE_DOCUMENTS )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. set ( DATE ,  FIELD_ DELIVERY_DATE, FIELD_F OOTER , FIELD_ HEAD,  NUMBER ,  STATE ,  SENDER , FIELD_ TAX_NUMBER, FIELD_ BANK_ACCOUNT, FIELD_ COURT, FIELD_ CUSTOMER, FIELD_ CUSTOMER_EMAIL, FIELD_ CUSTOMER_NUMBER, FIELD_ CUSTOMER_TAX_NUMBER, FIELD_ TEMPLATE_ID)   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. set ( DATE ,  DELIVERY_DATE , FOOTER , HEAD ,  NUMBER ,  STATE ,  SENDER , TAX_NUMBER , BANK_ACCOUNT , COURT , CUSTOMER , CUSTOMER_EMAIL , CUSTOMER_NUMBER , CUSTOMER_TAX_NUMBER , TEMPLATE_ID )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. where ( ID , equal ( doc . id ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. prepare ( db )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. apply ( timestamp , doc . delivery ( ) , doc . footer ( ) , doc . head ( ) , doc . number ( ) , doc . state ( ) . code ( ) , sender . name ( ) , sender . taxNumber ( ) , sender . bankAccount ( ) , sender . court ( ) , custom . name ( ) , custom . email ( ) , custom . id ( ) , custom . taxNumber ( ) , doc . template ( ) . id ( ) )   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -530,7 +533,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -530,7 +533,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									var  pos  =  entry . getValue ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									if  ( pos . docId ( )  ! =  doc . id ( ) )  pos . setDocId ( doc . id ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									if  ( pos . isNew ( ) ) {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										insertInto ( TABLE_POSITIONS , FIELD_ DOCUMENT_ID, FIELD_ POS,  FIELD_ ITEM_CODE, FIELD_ AMOUNT,  DESCRIPTION ,  TITLE , FIELD_ UNIT, FIELD_ PRICE, FIELD_ TAX, FIELD_ TIME_ID,  OPTIONAL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										insertInto ( TABLE_POSITIONS , DOCUMENT_ID , POS ,  ITEM_CODE , AMOUNT ,  DESCRIPTION ,  TITLE , UNIT , PRICE , TAX , TIME_ID ,  OPTIONAL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. values ( pos . docId ( ) , pos . num ( ) , pos . itemCode ( ) , pos . amount ( ) , pos . description ( ) , pos . title ( ) , pos . unit ( ) , pos . unitPrice ( ) , pos . tax ( ) , pos . timeId ( ) , pos . optional ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. execute ( db )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. close ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -538,12 +541,12 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -538,12 +541,12 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									if  ( pos . isDirty ( ) ) {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										update ( TABLE_POSITIONS )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. set ( FIELD_ ITEM_CODE, FIELD_ AMOUNT,  DESCRIPTION ,  TITLE , FIELD_ UNIT, FIELD_ PRICE, FIELD_ TAX, FIELD_ TIME_ID,  OPTIONAL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. where ( FIELD_ DOCUMENT_ID, equal ( doc . id ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. where ( FIELD_ POS, equal ( pos . num ( ) ) ) . prepare ( db )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. set ( ITEM_CODE , AMOUNT ,  DESCRIPTION ,  TITLE , UNIT , PRICE , TAX , TIME_ID ,  OPTIONAL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. where ( DOCUMENT_ID , equal ( doc . id ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. where ( POS , equal ( pos . num ( ) ) ) . prepare ( db )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. apply ( pos . itemCode ( ) , pos . amount ( ) , pos . description ( ) , pos . title ( ) , pos . unit ( ) , pos . unitPrice ( ) , pos . tax ( ) , pos . timeId ( ) , pos . optional ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
												. close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										if  ( pos . isDirty ( FIELD_ UNIT_PRICE) )  saveCustomerPrice ( doc . companyId ( ) , doc . customer ( ) . id ( ) , pos . itemCode ( ) , pos . unitPrice ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										if  ( pos . isDirty ( UNIT_PRICE ) )  saveCustomerPrice ( doc . companyId ( ) , doc . customer ( ) . id ( ) , pos . itemCode ( ) , pos . unitPrice ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										pos . clean ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									}   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -558,7 +561,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -558,7 +561,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						public  CustomerSettings  save ( long  companyId ,  Type  docType ,  String  customerId ,  CustomerSettings  settings )  throws  UmbrellaException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							if  ( ! settings . isDirty ( ) )  return  settings ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								replaceInto ( TABLE_CUSTOMER_SETTINGS , FIELD_ COMPANY_ID, FIELD_ DOC_TYPE_ID, FIELD_ CUSTOMER_NUMBER, FIELD_ DEFAULT_HEADER, FIELD_ DEFAULT_FOOTER, FIELD_ DEFAULT_MAIL)   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								replaceInto ( TABLE_CUSTOMER_SETTINGS , COMPANY_ID , DOC_TYPE_ID , CUSTOMER_NUMBER , DEFAULT_HEADER , DEFAULT_FOOTER , DEFAULT_MAIL )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. values ( companyId , docType . id ( ) , customerId , settings . header ( ) , settings . footer ( ) , settings . mailText ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. execute ( db )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. close ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -570,16 +573,16 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -570,16 +573,16 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  void  saveCustomerPrice ( long  company ,  String  customer ,  String  item ,  long  price )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( FIELD_ PRICE) . from ( TABLE_PRICES ) . where ( FIELD_ COMPANY_ID, equal ( company ) ) . where ( FIELD_ CUSTOMER_NUMBER, equal ( customer ) ) . where ( FIELD_ ITEM_CODE, equal ( item ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  rs  =  select ( PRICE ) . from ( TABLE_PRICES ) . where ( COMPANY_ID , equal ( company ) ) . where ( CUSTOMER_NUMBER , equal ( customer ) ) . where ( ITEM_CODE , equal ( item ) ) . exec ( db ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								Long  oldPrice  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( rs . next ( ) )  oldPrice  =  rs . getLong ( FIELD_ PRICE) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( rs . next ( ) )  oldPrice  =  rs . getLong ( PRICE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								rs . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								if  ( oldPrice  = =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									insertInto ( TABLE_PRICES ,  FIELD_ COMPANY_ID,  FIELD_ CUSTOMER_NUMBER,  FIELD_ ITEM_CODE,  FIELD_ PRICE) . values ( company ,  customer ,  item ,  price ) . execute ( db ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									insertInto ( TABLE_PRICES ,  COMPANY_ID ,  CUSTOMER_NUMBER ,  ITEM_CODE ,  PRICE ) . values ( company ,  customer ,  item ,  price ) . execute ( db ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								}  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									update ( TABLE_PRICES ) . where ( FIELD_ COMPANY_ID, equal ( company ) ) . where ( FIELD_ CUSTOMER_NUMBER, equal ( customer ) ) . where ( FIELD_ ITEM_CODE, equal ( item ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											. set ( FIELD_ PRICE) . prepare ( db ) . apply ( price ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
									update ( TABLE_PRICES ) . where ( COMPANY_ID , equal ( company ) ) . where ( CUSTOMER_NUMBER , equal ( customer ) ) . where ( ITEM_CODE , equal ( item ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
											. set ( PRICE ) . prepare ( db ) . apply ( price ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  catch  ( SQLException  e )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								throw  new  RuntimeException ( e ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -590,8 +593,8 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -590,8 +593,8 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						public  void  step ( CompanySettings  settings )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								update ( TABLE_COMPANY_SETTINGS )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. set ( FIELD_ TYPE_NUMBER)   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. where ( FIELD_ COMPANY_ID, equal ( settings . companyId ( ) ) ) . where ( FIELD_ DOC_TYPE_ID, equal ( settings . typeId ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. set ( TYPE_NUMBER )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. where ( COMPANY_ID , equal ( settings . companyId ( ) ) ) . where ( DOC_TYPE_ID , equal ( settings . typeId ( ) ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. prepare ( db )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. apply ( settings . typeNumber ( ) + 1 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										. close ( ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -604,9 +607,9 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -604,9 +607,9 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						public  Pair < Integer >  switchPositions ( long  docId ,  Pair < Integer >  pair )  throws  UmbrellaException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								db . setAutoCommit ( false ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								update ( TABLE_POSITIONS ) . set ( FIELD_ POS) . where ( FIELD_ DOCUMENT_ID, equal ( docId ) ) . where ( FIELD_ POS, equal ( pair . left ( ) ) ) . prepare ( db ) . apply ( - pair . right ( ) ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								update ( TABLE_POSITIONS ) . set ( FIELD_ POS) . where ( FIELD_ DOCUMENT_ID, equal ( docId ) ) . where ( FIELD_ POS, equal ( pair . right ( ) ) ) . prepare ( db ) . apply ( pair . left ( ) ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								update ( TABLE_POSITIONS ) . set ( FIELD_ POS) . where ( FIELD_ DOCUMENT_ID, equal ( docId ) ) . where ( FIELD_ POS, equal ( - pair . right ( ) ) ) . prepare ( db ) . apply ( pair . right ( ) ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								update ( TABLE_POSITIONS ) . set ( POS ) . where ( DOCUMENT_ID , equal ( docId ) ) . where ( POS , equal ( pair . left ( ) ) ) . prepare ( db ) . apply ( - pair . right ( ) ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								update ( TABLE_POSITIONS ) . set ( POS ) . where ( DOCUMENT_ID , equal ( docId ) ) . where ( POS , equal ( pair . right ( ) ) ) . prepare ( db ) . apply ( pair . left ( ) ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								update ( TABLE_POSITIONS ) . set ( POS ) . where ( DOCUMENT_ID , equal ( docId ) ) . where ( POS , equal ( - pair . right ( ) ) ) . prepare ( db ) . apply ( pair . right ( ) ) . close ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								db . setAutoCommit ( true ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							}  catch  ( SQLException  e )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								LOG . log ( ERROR , "Failed to switch positions {0} and {1} of document {2}" , pair . left ( ) , pair . right ( ) , docId ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -617,26 +620,26 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -617,26 +620,26 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  Document  toDoc ( ResultSet  rs ,  HashMap < Integer ,  Type >  types )  throws  SQLException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  id  =  rs . getLong ( ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  typeId  =  rs . getInt ( FIELD_ TYPE_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  typeId  =  rs . getInt ( TYPE_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  type  =  types . get ( typeId ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  company  =  rs . getLong ( FIELD_ COMPANY_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  company  =  rs . getLong ( COMPANY_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  number  =  rs . getString ( NUMBER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  timestamp  =  rs . getLong ( DATE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  date  =  timestamp  >  0  ?  Instant . ofEpochSecond ( timestamp ) . atOffset ( UTC ) . toLocalDate ( )  :  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  state  =  rs . getInt ( STATE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  delivery  =  rs . getString ( FIELD_ DELIVERY_DATE) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  head  =  rs . getString ( FIELD_ HEAD) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  footer  =  rs . getString ( FIELD_F OOTER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  currency  =  rs . getString ( FIELD_ CURRENCY) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  delivery  =  rs . getString ( DELIVERY_DATE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  head  =  rs . getString ( HEAD ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  footer  =  rs . getString ( FOOTER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  currency  =  rs . getString ( CURRENCY ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  senderName  =  rs . getString ( SENDER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  taxNumber  =  rs . getString ( FIELD_ TAX_NUMBER) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  bankAccount  =  rs . getString ( FIELD_ BANK_ACCOUNT) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  court  =  rs . getString ( FIELD_ COURT) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerName  =  rs . getString ( FIELD_ CUSTOMER) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerId  =  rs . getString ( FIELD_ CUSTOMER_NUMBER) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerTaxNumber  =  rs . getString ( FIELD_ CUSTOMER_TAX_NUMBER) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerEmail  =  rs . getString ( FIELD_ CUSTOMER_EMAIL) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  taxNumber  =  rs . getString ( TAX_NUMBER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  bankAccount  =  rs . getString ( BANK_ACCOUNT ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  court  =  rs . getString ( COURT ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerName  =  rs . getString ( CUSTOMER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerId  =  rs . getString ( CUSTOMER_NUMBER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerTaxNumber  =  rs . getString ( CUSTOMER_TAX_NUMBER ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customerEmail  =  rs . getString ( CUSTOMER_EMAIL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  customer  =  new  Customer ( customerId ,  customerName ,  customerEmail ,  customerTaxNumber , FALLBACK_LANG ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  sender  =  new  Sender ( senderName , bankAccount , taxNumber , court ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  template  =  toTemplate ( rs ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -645,8 +648,8 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -645,8 +648,8 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  Template  toTemplate ( ResultSet  rs )  throws  SQLException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							try  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  id  =  rs . getLong ( FIELD_ TEMPLATE_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  company  =  rs . getLong ( FIELD_ COMPANY_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  id  =  rs . getLong ( TEMPLATE_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  company  =  rs . getLong ( COMPANY_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  name  =  rs . getString ( NAME ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								var  data  =  rs . getBytes ( TEMPLATE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								return  new  Template ( id , company , name , data ) ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -656,20 +659,20 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
				@@ -656,20 +659,20 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  Position  toPosition ( ResultSet  rs )  throws  SQLException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  num  =  rs . getInt ( FIELD_ POS) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  itemCode  =  rs . getString ( FIELD_ ITEM_CODE) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  amount  =  rs . getDouble ( FIELD_ AMOUNT) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  unit  =  rs . getString ( FIELD_ UNIT) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  num  =  rs . getInt ( POS ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  itemCode  =  rs . getString ( ITEM_CODE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  amount  =  rs . getDouble ( AMOUNT ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  unit  =  rs . getString ( UNIT ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  title  =  rs . getString ( TITLE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  description  =  rs . getString ( DESCRIPTION ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  unitPrice  =  rs . getLong ( FIELD_ PRICE) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  tax  =  rs . getInt ( FIELD_ TAX) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  timeId  =  rs . getLong ( FIELD_ TIME_ID) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  unitPrice  =  rs . getLong ( PRICE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  tax  =  rs . getInt ( TAX ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  timeId  =  rs . getLong ( TIME_ID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							var  optional  =  rs . getBoolean ( OPTIONAL ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  new  Position ( num , itemCode , amount , unit , title , description , unitPrice , tax , timeId , optional ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						private  Type  toType ( ResultSet  rs )  throws  SQLException  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  new  Type ( rs . getInt ( ID ) , rs . getInt ( FIELD_ NEXT_TYPE) , rs . getString ( NAME ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							return  new  Type ( rs . getInt ( ID ) , rs . getInt ( NEXT_TYPE ) , rs . getString ( NAME ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}