OpenConcerto

Dépôt officiel du code source de l'ERP OpenConcerto
sonarqube

svn://code.openconcerto.org/openconcerto

Rev

Rev 151 | Rev 174 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 151 Rev 156
Line 13... Line 13...
13
 
13
 
14
 package org.openconcerto.erp.generationDoc;
14
 package org.openconcerto.erp.generationDoc;
15
 
15
 
16
import org.openconcerto.erp.config.ComptaPropsConfiguration;
16
import org.openconcerto.erp.config.ComptaPropsConfiguration;
17
import org.openconcerto.erp.core.common.ui.PreviewFrame;
17
import org.openconcerto.erp.core.common.ui.PreviewFrame;
-
 
18
import org.openconcerto.erp.core.sales.invoice.report.VenteFactureXmlSheet;
-
 
19
import org.openconcerto.erp.core.sales.quote.report.PaypalStamper;
18
import org.openconcerto.erp.generationDoc.element.TypeModeleSQLElement;
20
import org.openconcerto.erp.generationDoc.element.TypeModeleSQLElement;
-
 
21
import org.openconcerto.erp.preferences.PayPalPreferencePanel;
19
import org.openconcerto.erp.storage.CloudStorageEngine;
22
import org.openconcerto.erp.storage.CloudStorageEngine;
20
import org.openconcerto.erp.storage.StorageEngine;
23
import org.openconcerto.erp.storage.StorageEngine;
21
import org.openconcerto.erp.storage.StorageEngines;
24
import org.openconcerto.erp.storage.StorageEngines;
22
import org.openconcerto.openoffice.OOUtils;
25
import org.openconcerto.openoffice.OOUtils;
23
import org.jopendocument.link.Component;
26
import org.jopendocument.link.Component;
24
import org.openconcerto.sql.Configuration;
27
import org.openconcerto.sql.Configuration;
25
import org.openconcerto.sql.element.SQLElement;
28
import org.openconcerto.sql.element.SQLElement;
26
import org.openconcerto.sql.model.SQLBase;
29
import org.openconcerto.sql.model.SQLBase;
27
import org.openconcerto.sql.model.SQLRow;
30
import org.openconcerto.sql.model.SQLRow;
28
import org.openconcerto.sql.model.SQLRowAccessor;
31
import org.openconcerto.sql.model.SQLRowAccessor;
-
 
32
import org.openconcerto.sql.preferences.SQLPreferences;
29
import org.openconcerto.utils.ExceptionHandler;
33
import org.openconcerto.utils.ExceptionHandler;
30
import org.openconcerto.utils.cc.ITransformer;
34
import org.openconcerto.utils.cc.ITransformer;
31
 
35
 
-
 
36
import java.awt.GraphicsEnvironment;
32
import java.awt.print.PrinterJob;
37
import java.awt.print.PrinterJob;
33
import java.io.BufferedInputStream;
38
import java.io.BufferedInputStream;
34
import java.io.File;
39
import java.io.File;
35
import java.io.FileInputStream;
40
import java.io.FileInputStream;
-
 
41
import java.io.FileNotFoundException;
36
import java.io.IOException;
42
import java.io.IOException;
-
 
43
import java.io.InputStream;
-
 
44
import java.io.InputStreamReader;
-
 
45
import java.io.OutputStream;
37
import java.lang.Thread.UncaughtExceptionHandler;
46
import java.lang.Thread.UncaughtExceptionHandler;
-
 
47
import java.net.HttpURLConnection;
-
 
48
import java.net.URL;
-
 
49
import java.net.URLConnection;
-
 
50
import java.net.URLEncoder;
-
 
51
import java.nio.charset.StandardCharsets;
38
import java.util.Arrays;
52
import java.util.Arrays;
39
import java.util.HashMap;
53
import java.util.HashMap;
40
import java.util.List;
54
import java.util.List;
41
import java.util.Map;
55
import java.util.Map;
-
 
56
import java.util.StringJoiner;
42
import java.util.concurrent.Callable;
57
import java.util.concurrent.Callable;
43
import java.util.concurrent.ExecutionException;
58
import java.util.concurrent.ExecutionException;
44
import java.util.concurrent.ExecutorService;
59
import java.util.concurrent.ExecutorService;
45
import java.util.concurrent.Future;
60
import java.util.concurrent.Future;
46
import java.util.concurrent.LinkedBlockingQueue;
61
import java.util.concurrent.LinkedBlockingQueue;
Line 211... Line 226...
211
                    }
226
                    }
212
                }
227
                }
213
            }
228
            }
214
 
229
 
215
        } catch (Exception e) {
230
        } catch (Exception e) {
216
            e.printStackTrace();
-
 
217
            ExceptionHandler.handle("Impossible de charger le document OpenOffice", e);
231
            ExceptionHandler.handle("Impossible de charger le document OpenOffice " + pdfFile.getAbsolutePath() + "(viewer : " + useODSViewer + ")", e);
218
        }
232
        }
219
    }
233
    }
220
 
234
 
221
    MetaDataSheet meta;
235
    MetaDataSheet meta;
222
 
236
 
Line 237... Line 251...
237
 
251
 
238
    public MetaDataSheet getMetaGeneration() {
252
    public MetaDataSheet getMetaGeneration() {
239
        return this.meta;
253
        return this.meta;
240
    }
254
    }
241
 
255
 
242
    public static void createPDF(final File generatedFile, final File pdfFile, final OpenDocument doc, String storagePath) {
256
    public void createPDF(final File generatedFile, final File pdfFile, final OpenDocument doc, String storagePath) {
243
        if (pdfFile == null) {
257
        if (pdfFile == null) {
244
            throw new IllegalArgumentException("null PDF file");
258
            throw new IllegalArgumentException("null PDF file");
245
        }
259
        }
246
        try {
260
        try {
-
 
261
            if (VenteFactureXmlSheet.TEMPLATE_ID.equals(getDefaultTemplateId())) {
-
 
262
                final SQLPreferences prefs = SQLPreferences.getMemCached(getElement().getTable().getDBRoot());
-
 
263
                if (prefs.getBoolean(PayPalPreferencePanel.PAYPAL_INVOICE, false)) {
-
 
264
                    try {
-
 
265
                        final File inFile = File.createTempFile("oc_", pdfFile.getName());
-
 
266
                        SheetUtils.convert2PDF(doc, inFile);
-
 
267
                        PaypalStamper s = new PaypalStamper();
-
 
268
                        int x = prefs.getInt(PayPalPreferencePanel.PAYPAL_INVOICE_X, 0);
-
 
269
                        int y = prefs.getInt(PayPalPreferencePanel.PAYPAL_INVOICE_Y, 0);
-
 
270
 
-
 
271
                        // Reference
-
 
272
                        String ref = getSQLRow().getString("NUMERO");
-
 
273
                        // Montant : ex : 10.55
-
 
274
                        long cents = getSQLRow().getLong("NET_A_PAYER");
-
 
275
                        String amount = cents / 100 + "." + cents % 100;
-
 
276
                        // Devise
-
 
277
                        // TODO : autres devises
-
 
278
                        String currency = "EUR";
-
 
279
                        // POST
-
 
280
                        final URL url = new URL("https://cloud.openconcerto.org/payment");
-
 
281
                        final URLConnection con = url.openConnection();
-
 
282
                        final HttpURLConnection http = (HttpURLConnection) con;
-
 
283
                        http.setRequestMethod("POST");
-
 
284
                        http.setDoOutput(true);
-
 
285
                        http.setDefaultUseCaches(false);
-
 
286
 
-
 
287
                        String hyperlink = null;
-
 
288
                        // x-www-form-urlencoded
-
 
289
                        final Map<String, String> arguments = new HashMap<>();
-
 
290
                        arguments.put("pI", prefs.get(PayPalPreferencePanel.PAYPAL_CLIENTID, ""));
-
 
291
                        arguments.put("pS", prefs.get(PayPalPreferencePanel.PAYPAL_SECRET, ""));
-
 
292
                        arguments.put("ref", ref);
-
 
293
                        arguments.put("amount", amount);
-
 
294
                        arguments.put("currency", currency);
-
 
295
                        arguments.put("type", "paypal");
-
 
296
                        final StringJoiner sj = new StringJoiner("&");
-
 
297
                        for (Map.Entry<String, String> entry : arguments.entrySet()) {
-
 
298
                            sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "=" + URLEncoder.encode(entry.getValue(), "UTF-8"));
-
 
299
                        }
-
 
300
                        final String postData = sj.toString();
-
 
301
                        System.err.println("SheetXml.createPDF() " + postData);
-
 
302
                        byte[] out = postData.getBytes(StandardCharsets.UTF_8);
-
 
303
                        int length = out.length;
-
 
304
                        http.setFixedLengthStreamingMode(length);
-
 
305
                        http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
-
 
306
                        http.connect();
-
 
307
                        try (OutputStream os = http.getOutputStream()) {
-
 
308
                            os.write(out);
-
 
309
                        }
-
 
310
                        if (http.getResponseCode() != 401) {
-
 
311
 
-
 
312
                            InputStream is = http.getInputStream();
-
 
313
                            InputStreamReader isr = new InputStreamReader(is);
-
 
314
 
-
 
315
                            int numCharsRead;
-
 
316
                            char[] charArray = new char[1024];
-
 
317
                            StringBuilder sb = new StringBuilder();
-
 
318
                            while ((numCharsRead = isr.read(charArray)) > 0) {
-
 
319
                                sb.append(charArray, 0, numCharsRead);
-
 
320
                            }
-
 
321
                            //
-
 
322
                            hyperlink = sb.toString();
-
 
323
                        }
-
 
324
                        s.addLink(inFile, pdfFile, x, y, hyperlink);
-
 
325
                    } catch (Exception e) {
-
 
326
                        e.printStackTrace();
-
 
327
                        SheetUtils.convert2PDF(doc, pdfFile);
-
 
328
                    }
-
 
329
 
-
 
330
                } else {
-
 
331
                    SheetUtils.convert2PDF(doc, pdfFile);
-
 
332
                }
-
 
333
            } else {
247
            SheetUtils.convert2PDF(doc, pdfFile);
334
                SheetUtils.convert2PDF(doc, pdfFile);
-
 
335
            }
-
 
336
 
248
        } catch (Throwable e) {
337
        } catch (Throwable e) {
249
            ExceptionHandler.handle("Impossible de créer le PDF " + pdfFile.getAbsolutePath(), e);
338
            ExceptionHandler.handle("Impossible de créer le PDF " + pdfFile.getAbsolutePath(), e);
250
        }
339
        }
251
        if (!pdfFile.canRead()) {
340
        if (!pdfFile.canRead()) {
252
            ExceptionHandler.handle("Le fichier PDF " + pdfFile.getAbsolutePath() + " ne peut être lu.");
341
            ExceptionHandler.handle("Le fichier PDF " + pdfFile.getAbsolutePath() + " ne peut être lu.");
Line 419... Line 508...
419
            @Override
508
            @Override
420
            public void run() {
509
            public void run() {
421
                File f;
510
                File f;
422
                try {
511
                try {
423
                    f = getOrCreateDocumentFile();
512
                    f = getOrCreateDocumentFile();
424
                    // ComptaPropsConfiguration.getOOConnexion().loadDocument(f, false);
513
                    if (f != null && f.exists()) {
425
                    OOUtils.open(f);
514
                        OOUtils.open(f);
-
 
515
                    } else {
-
 
516
                        if (!GraphicsEnvironment.isHeadless()) {
-
 
517
                            if (f != null) {
-
 
518
                                JOptionPane.showMessageDialog(null, "Le fichier " + f.getAbsolutePath() + " est manquant");
-
 
519
                            } else {
-
 
520
                                JOptionPane.showMessageDialog(null, "Fichier manquant");
-
 
521
                            }
-
 
522
                        } else {
-
 
523
                            if (f != null) {
-
 
524
                                throw new FileNotFoundException(f.getAbsolutePath() + " missing");
-
 
525
                            } else {
-
 
526
                                throw new NullPointerException("null document");
-
 
527
                            }
-
 
528
                        }
-
 
529
                    }
426
                } catch (Exception e) {
530
                } catch (Exception e) {
427
                    ExceptionHandler.handle("Impossible d'ouvrir le document.", e);
531
                    ExceptionHandler.handle("Impossible d'ouvrir le document.", e);
428
                }
532
                }
429
            }
533
            }
430
        };
534
        };