#!/usr/bin/env python
# -*- coding: latin1 -*-

""" 
   Copyright (C) 2003-2005 PimenTech SARL (http://www.pimentech.net)

   Pimengest2 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 2 of the
   License, or (at your option) any later version.

   Pimengest2 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 library; see the file COPYING.LIB.  If not,
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.	
"""

from genpdf import *

class genlettre(genpdf):

	tokens={"ENTETE":"%# entete_from_genpdf", "DESTINATAIRE":"", "SOCIETE":"", "ADRESSE_SOCIETE":"~", "CP_SOCIETE":"~", "VILLE_SOCIETE":"~", "OBJET":"~", "CIVILITE":"~", "CONTENU":"~", "FORMULE":"~", "EXPEDITEUR":"", "FICHIER_LOGO":"~", "FICHIER_PIED":"~", "UE_TVA":"~", "SIRET":"~"}

	def __init__(self, uid, with_header, verbose, filedir):
		genpdf.__init__(self, uid, with_header, verbose, filedir)

	def getinfo_lettre(self):
		req="""
SELECT l.objet, fm.nom AS formule, cv.nom AS civilite, l.contenu, l.date_expedition,
       s.nom AS societe, s.cp, s.adresse1, s.ville,
	   pp.nom, pp.prenom, py.nom AS nom_expediteur, py.prenom AS prenom_expediteur,
	   ms.nom AS ma_societe, ms.logo, ms.pied_page, ms.raison,ms.adresse1 as mon_adresse,ms.cp as mon_cp,ms.ville as ma_ville,'TEL : '||ms.tel as mon_tel,'FAX : '||ms.fax as mon_fax,'EMAIL : '||ms.email as mon_mail,ms.siret,ms.ue_tva,ms.commentaire
FROM lettre l
LEFT JOIN personne_physique py ON (py.uid=l.ref_expe_personne_physique)
LEFT JOIN societe ms ON (l.ref_view_mes_societes=ms.uid)
LEFT JOIN formule fm ON (fm.uid=l.ref_formule)
LEFT JOIN civilite cv ON (cv.uid=l.ref_civilite)
LEFT JOIN personne_physique pp ON (pp.uid=l.ref_desti_personne_physique)
LEFT JOIN societe s ON (s.uid=l.ref_societe)
WHERE l.uid=%s""" % self.UID

		self.curs.execute(req)
		if self.curs.rowcount!=1:
			self.DEBUG_INFO+=req
			print req			
			raise "ERROR"
		else:
			res=self.curs.dictfetchone()
			if res['logo']:
				self.tokens['FICHIER_LOGO']=self.FILEDIR+"/"+res['logo']
			if res['pied_page']:
				self.tokens['FICHIER_PIED']=self.FILEDIR+"/"+res['pied_page']

			self.tokens['MON_ADRESSE']=res['mon_adresse']
			self.tokens['MON_CP']=res['mon_cp']
			self.tokens['MA_VILLE']=res['ma_ville']
			self.tokens['MON_TEL']=res['mon_tel']
			self.tokens['MON_FAX']=res['mon_fax']
			self.tokens['MON_MAIL']=res['mon_mail']
			self.tokens['ACCROCHE']=res['commentaire']
			self.tokens['RAISON']=res['raison']
			if res['siret']:
				self.tokens['SIRET']='RCS: '+res['siret']
			if res['ue_tva']:
				self.tokens['UE_TVA']='TVA-IN. '+res['ue_tva']
				
			self.tokens['SOCIETE']=res['societe']
			self.tokens['ADRESSE_SOCIETE']=res['adresse1']
			self.tokens['CP_SOCIETE']=res['cp']
			self.tokens['VILLE_SOCIETE']=res['ville']
			self.tokens['OBJET']=res['objet']
			self.tokens['CIVILITE']=res['civilite']
			self.tokens['CONTENU']=res['contenu']
			self.tokens['FORMULE']=res['formule']

			if res['prenom']:
				self.tokens['DESTINATAIRE']=res['prenom']
			if res['nom']:
				self.tokens['DESTINATAIRE']+=' '+res['nom']
			if res['prenom_expediteur']:
				self.tokens['EXPEDITEUR']=res['prenom_expediteur']
			if res['nom_expediteur']:
				self.tokens['EXPEDITEUR']+=' '+res['nom_expediteur']
			if res['ma_societe']:
				self.tokens['EXPEDITEUR']+=' pour '+res['ma_societe']

			if self.tokens['DESTINATAIRE']!='' and self.tokens['SOCIETE']==None:
				req="SELECT pp.adresse1, pp.cp, pp.ville FROM personne_physique pp, lettre l WHERE pp.uid=l.ref_desti_personne_physique AND l.uid=%s" % self.UID
				self.curs.execute(req)
				if self.curs.rowcount!=1:
					req="SELECT s.nom AS societe, s.cp, s.adresse1, s.ville FROM personne_physique pp, travail_pour tp, lettre l, societe s WHERE tp.ref_societe=s.uid AND tp.ref_personne_physique=pp.uid AND pp.uid=l.ref_expe_personne_physique AND l.uid=%s" % self.UID
					self.curs.execute(req)
					if self.curs.rowcount!=1:
						self.DEBUG_INFO+=req
						print req
						raise "ERROR"
					else:
						res=self.curs.dictfetchone()
						self.tokens['SOCIETE']=res['societe']
						self.tokens['ADRESSE_SOCIETE']=res['adresse1']
						self.tokens['CP_SOCIETE']=res['cp']
						self.tokens['VILLE_SOCIETE']=res['ville']
				else:
					res=self.curs.dictfetchone()
					self.tokens['ADRESSE_SOCIETE']=res['adresse1']
					self.tokens['CP_SOCIETE']=res['cp']
					self.tokens['VILLE_SOCIETE']=res['ville']

			if self.tokens['EXPEDITEUR']!='' and self.tokens['MON_ADRESSE']==None:
				req="SELECT pp.adresse1, pp.cp, pp.ville FROM personne_physique pp, lettre l WHERE pp.uid=l.ref_expe_personne_physique AND l.uid=%s" % self.UID
				self.curs.execute(req)
				if self.curs.rowcount!=1:
					self.DEBUG_INFO+=req
					print req
					raise "ERROR"
				else:
					res=self.curs.dictfetchone()
					if res['adresse1']:
						self.tokens['MON_ADRESSE']=self.tokens['EXPEDITEUR']+' - '+res['adresse1']
					self.tokens['MON_CP']=res['cp']
					self.tokens['MA_VILLE']=res['ville']
		
			for token, value in self.tokens.items():
				if value==None:
					self.tokens[token]='~'

def main():
	options=get_options()
	OUTFILE=options['OUTDIR']+"/lettre"
	if options['TEMPLATE'] == '':
		options['TEMPLATE']='template_lettre.tex'

	base=extract_base(options['DATABASE'])
	if not base:
		usage(get_options.__doc__)

	try:
		os.system('rm -f '+options['OUTDIR']+ '/pimengest2_debug')
		object=genlettre(options['UID'], options['WITH_ENTETE'], options['VERBOSE'], options['FILEDIR'])
		object.getConnection(base['base'], base['user'], base['pass'], base['host'], base['port'])
		object.getinfo_lettre()
		object.replace_values(0, options['LATEXDIR'], options['TEMPLATE'])
	except 'ERROR':
		log(options['OUTDIR']+'/pimengest2_debug', '\n---\nCertainly not enougth infomation to generate the "lettre". This is the query :\n---\n')
		log(options['OUTDIR']+'/pimengest2_debug', object.DEBUG_INFO)
		sys.exit(-1)

	if not check_output(options['OUTDIR']):
		os.makedirs(options['OUTDIR'])
		
	object.savetexfile(OUTFILE)
	if options['WITH_PDF']:
		print object.toPDF(options['OUTDIR'], OUTFILE)


if __name__ == '__main__':
	main()

