Retouche de l'édition
[bilio:bilio.git] / edition.rb
1 # coding: utf-8
2
3 class Edition < Prawn::Document
4         
5         def initialize db, id=1
6         
7                 super()
8                 
9                 @id = id
10                 @db = db
11                 
12                 societe
13                 en_tete
14                 corps
15                 
16                 rendu
17         
18         end
19         
20         def societe
21         
22                 pas = 10
23                 text_size = 10
24                 top = 700
25                 
26                 image "resources/images/logo.png", :width => 80, :at => [75,top+40]
27                 top -= pas+5
28                 draw_text "SOCIETE D'IMPORTATION DU SUD", :at => [0,top], :size => 14
29                 top -= pas+5
30                 draw_text "Capital de 164 645 €", :at => [60,top], :size => text_size
31                 top -= pas
32                 draw_text "Z.I. N° 1 - B.P. 349 - 97452 Saint-Pierre Cédex", :at => [10,top], :size => text_size
33                 top -= pas
34                 draw_text "Tél. : 02 62 25 12 61 Fax : 02 62 25 66 12", :at => [20,top], :size => text_size
35                 top -= pas
36                 draw_text "sisre@sis.re", :at => [80,top], :size => text_size
37                 top -= pas
38                 draw_text "Banque : BRED 10107 00492 0053000445 28", :at => [20,top], :size => 8
39                 top -= pas
40                 draw_text "SIRET : 310 879 804 00022 - RC : 74 B 72 - Code APE: 4639 B", :at => [0,top], :size => 8
41         
42         end
43         
44         def en_tete
45         
46                 req = "SELECT T0.client, T0.date_document, T1.designation, T2.type "
47                 req += " FROM documents T0 INNER JOIN tarifs T1 ON T0.tarif_id=T1.id "
48                 req += " INNER JOIN type_document T2 ON T0.id_type_document=T2.id "
49                 req += " WHERE T0.id=#{@id} "
50                 
51                 res = @db.requete req
52                 info = res.first
53                 
54                 date = "#{info["date_document"].split("-")[2]}/#{info["date_document"].split("-")[1]}/#{info["date_document"].split("-")[0]}"
55                 
56                 draw_text "Saint-Pierre, le #{DateTime.now.day}/#{DateTime.now.month}/#{DateTime.now.year} à #{DateTime.now.hour}h#{DateTime.now.min}", :at => [390,720], :size => 10
57                 top = 650
58                 draw_text "#{info["type"].upcase}", :at => [360,top], :size => 25
59                 draw_text "PROVISOIRE", :at => [360,top-30], :size => 25
60                 
61                 top = 600
62                 rectangle [0,top], 250, 80
63                 rectangle [290,top], 250, 80
64                 stroke
65                 
66                 top = 585
67                 left = 10
68                 size = 10
69                 pas = 20
70                 draw_text "#{info["type"].upcase} PROVISOIRE N° #{@id}", :at => [left,top], :size => size
71                 top -= pas
72                 draw_text "Date document: #{date}", :at => [left,top], :size => size
73                 top -= pas
74                 draw_text "Client #{info["designation"]}", :at => [left,top], :size => size
75                 
76                 top = 580
77                 left = 310
78                 draw_text "#{info["client"]} ", :at => [left,top], :size => size
79                 top -= pas
80         
81         end
82         
83         def corps
84         
85                 req = "SELECT T1.code, T1.designation, T0.qtite, T0.colisage, (T0.colisage*T0.qtite) AS nb_total, T0.pu, T0.remise, (T0.pu*(1+T0.id_tva/100)) AS pu_ttc, T0.total_ligne, (T0.total_ligne*(1+T0.id_tva/100)) AS total_ligne_ttc, T0.id_tva "
86                 req += " FROM documents_lignes T0 INNER JOIN articles T1 ON T0.id_article=T1.id "
87                 req += " WHERE id_document=#{@id} "
88                 req += " ORDER BY T0.id"
89                 
90                 res = @db.requete req
91                 
92                 res_array = []
93                 res.each do |ligne|
94                         l = [ligne["code"], ligne["designation"], ligne["qtite"], ligne["colisage"], ligne["nb_total"], ligne["pu"], ligne["remise"], ligne["pu_ttc"].to_f.round(3), ligne["total_ligne"], ligne["total_ligne_ttc"].to_f.round(2), ligne["id_tva"]]
95                         res_array << l
96                 end
97                 
98                 15.times do text("  ") end
99                 
100                 data = [["Code","Désignation","Nb Colis achetés","Colisage", "Nb total d'unité","PU HT", "Remise %", "PU TTC", "Montant Total HT", "Montant Total TTC", "TVA"]]
101                 data += res_array
102                 
103                 table data do |table|
104                         table.header = true
105                         table.cell_style = { :size => 6}
106                 end 
107                 
108                 pieds res
109         
110         end
111         
112         def pieds res
113                 
114                 req = "SELECT note FROM documents WHERE id=#{@id}"
115                 res_note = @db.requete req
116                 note = (res_note.first["note"].nil? ? "" : res_note.first["note"])
117
118                 ht = 0.0
119                 ht0 = 0.0
120                 ht2 = 0.0
121                 ht8 = 0.0
122                 tva = 0.0
123         
124                 res.each { |ligne|
125                         ht += ligne["total_ligne"].to_f unless ligne["total_ligne"].nil?
126                         tva += ligne["total_ligne"].to_f*(ligne["id_tva"].to_f/100) unless ligne["total_ligne"].nil? or ligne["id_tva"].nil? 
127                         case ligne["id_tva"].to_f
128                                 when 0.0
129                                         ht0 += ligne["total_ligne"].to_f
130                                 when 8.5
131                                         ht8 += ligne["total_ligne"].to_f
132                                 when 2.1
133                                         ht2 += ligne["total_ligne"].to_f
134                         end
135                 }
136                 
137                 ht = ht.round(2)
138                 tva = tva.round(2)      
139                 ttc = (ht+tva).round(2) 
140                 
141                 top = 130
142                 start_new_page if cursor<top
143                 left = 10
144                 size = 10
145                 pas = 15
146                 draw_text "Remarque :", :at => [left,top], :size => size
147                 top -= pas
148                 draw_text "#{note}", :at => [left,top], :size => size
149                 
150                 left = 450
151                 
152                 top = 100
153                 rectangle [left,top], 100, 30
154                 draw_text "TOTAL €", :at => [left+32,top-18], :size => size
155                 top -= 30
156                 rectangle [left,top], 100, 20
157                 draw_text "#{ht} €", :at => [left+10,top-13], :size => size
158                 rectangle [left-80,top], 80, 20
159                 draw_text "Total HT", :at => [left-60,top-13], :size => size
160                 top -= 20
161                 rectangle [left,top], 100, 20
162                 draw_text "#{tva} €", :at => [left+10,top-13], :size => size
163                 rectangle [left-80,top], 80, 20
164                 draw_text "Total TVA", :at => [left-62,top-13], :size => size
165                 top -= 20
166                 rectangle [left,top], 100, 20
167                 draw_text "#{ttc} €", :at => [left+10,top-13], :size => size
168                 rectangle [left-80,top], 80, 20
169                 draw_text "Net à Payer", :at => [left-65,top-13], :size => size
170                 stroke
171                 
172                 top = 100
173                 left = 10
174                 rectangle [left,top], 220, 20
175                 draw_text "Détails de TVA", :at => [left+80,top-13], :size => size
176                 top -= 20
177                 rectangle [left,top], 70, 20
178                 draw_text "HT", :at => [left+28,top-13], :size => size
179                 rectangle [left+70,top], 70, 20
180                 draw_text "TVA", :at => [left+96,top-13], :size => size
181                 rectangle [left+140,top], 80, 20
182                 draw_text "MONTANT TVA", :at => [left+146,top-13], :size => size
183                 top -= 20
184                 rectangle [left,top], 70, 45
185                 draw_text "#{ht0.round(2)} €", :at => [left+10,top-13], :size => size
186                 draw_text "#{ht2.round(2)} €", :at => [left+10,top-26], :size => size
187                 draw_text "#{ht8.round(2)} €", :at => [left+10,top-40], :size => size
188                 rectangle [left+70,top], 70, 45
189                 draw_text "0.00 %", :at => [left+90,top-13], :size => size
190                 draw_text "2.10 %", :at => [left+90,top-26], :size => size
191                 draw_text "8.50 %", :at => [left+90,top-40], :size => size
192                 rectangle [left+140,top], 80, 45
193                 draw_text "0.00 €", :at => [left+160,top-13], :size => size
194                 draw_text "#{(ht2.round(2)*0.021).round(2)} €", :at => [left+160,top-26], :size => size
195                 draw_text "#{(ht8.round(2)*0.085).round(2)} €", :at => [left+160,top-40], :size => size
196                 stroke
197                 
198                 draw_text "Pénalités de retard au taux de 1.50% / mois (loi du 15/05/01)", :at => [left,top-58], :size => size
199                 
200         end
201         
202         def rendu
203         
204                 number_pages "<page>/<total>", {:start_count_at => 1, :at => [bounds.right - 100, 0], :align => :right, :size => 8}
205                 render_file "document.pdf"
206                 system "evince","document.pdf"
207         
208         end
209         
210 end