mirror of
https://github.com/imapsync/imapsync.git
synced 2025-07-23 02:35:54 +02:00
1.411
This commit is contained in:
parent
02322d6ed1
commit
09dfa9982d
72 changed files with 11829 additions and 287 deletions
147
paypal_reply/memo
Normal file
147
paypal_reply/memo
Normal file
|
@ -0,0 +1,147 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: memo,v 1.3 2011/03/28 02:14:47 gilles Exp gilles $
|
||||
|
||||
echo paypal_bilan_tests_refact_2
|
||||
paypal_bilan_tests_refact_2() {
|
||||
# DID output no diff between paypal_bilan_1.22 and 1.23
|
||||
(
|
||||
set -x
|
||||
for f in /g/paypal/paypal_201?_??_complet.csv; do
|
||||
fb=`basename "$f"`
|
||||
f1=/g/var/paypal_bilan/tests/${fb}_1.22.out1
|
||||
f2=/g/var/paypal_bilan/tests/${fb}_1.22.out2
|
||||
rm "$f2"
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan_1.22 \
|
||||
--bnc --debug --debug_csv "$f" \
|
||||
> "$f1"
|
||||
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
--bnc --debug --debug_csv "$f" \
|
||||
> "$f2"
|
||||
|
||||
echo diff "$f1" "$f2"
|
||||
diff "$f1" "$f2"
|
||||
done
|
||||
|
||||
for f in /g/paypal/paypal_201?_??_complet.csv; do
|
||||
fb=`basename "$f"`
|
||||
f1=/g/var/paypal_bilan/tests/${fb}_tva.out1
|
||||
f2=/g/var/paypal_bilan/tests/${fb}_tva.out2
|
||||
rm "$f2"
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan_1.22 \
|
||||
"$f" \
|
||||
> "$f1"
|
||||
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
"$f" \
|
||||
> "$f2"
|
||||
|
||||
echo diff "$f1" "$f2"
|
||||
diff "$f1" "$f2"
|
||||
done
|
||||
|
||||
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
#echo paypal_bilan_tests_refact_1
|
||||
paypal_bilan_tests_refact_1() {
|
||||
# DID output no diff between paypal_bilan_1.11 and 1.13
|
||||
(
|
||||
#set -x
|
||||
for f in /g/paypal/paypal_201?_??.csv; do
|
||||
fb=`basename "$f"`
|
||||
f1=/g/var/paypal_bilan/tests/$fb.out1
|
||||
f2=/g/var/paypal_bilan/tests/$fb.out2
|
||||
rm "$f2"
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan_1.11 \
|
||||
--bnc --debug "$f" \
|
||||
> "$f1"
|
||||
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
--bnc --debug "$f" \
|
||||
> "$f2"
|
||||
|
||||
echo diff "$f1" "$f2"
|
||||
diff "$f1" "$f2"
|
||||
done
|
||||
|
||||
for f in /g/paypal/paypal_201?_??.csv; do
|
||||
fb=`basename "$f"`
|
||||
f1=/g/var/paypal_bilan/tests/$fb.out1
|
||||
f2=/g/var/paypal_bilan/tests/$fb.out2_usd_eur
|
||||
rm "$f2"
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan_1.11 \
|
||||
--bnc --debug "$f" \
|
||||
> "$f1"
|
||||
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
--bnc --debug --usdeur 1.2981 "$f" \
|
||||
> "$f2"
|
||||
|
||||
echo diff "$f1" "$f2"
|
||||
diff "$f1" "$f2"
|
||||
done
|
||||
|
||||
for f in /g/paypal/paypal_201?_??.csv; do
|
||||
fb=`basename "$f" .csv`
|
||||
|
||||
#echo $fb
|
||||
|
||||
f1i=/g/paypal/$fb.csv
|
||||
f2i=/g/paypal/${fb}_complet.csv
|
||||
|
||||
f1o=/g/var/paypal_bilan/tests/t03_$fb.out1
|
||||
f2o=/g/var/paypal_bilan/tests/t03_$fb.out2
|
||||
|
||||
#echo $f1i
|
||||
#echo $f2i
|
||||
#echo $f1o
|
||||
#echo $f2o
|
||||
|
||||
rm -f "$f1o" "$f2o"
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
--bnc --debug "$f1i" \
|
||||
> "$f1o"
|
||||
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
--bnc --debug "$f2i" \
|
||||
> "$f2o"
|
||||
|
||||
echo diff "$f1o" "$f2o"
|
||||
diff "$f1o" "$f2o"
|
||||
done
|
||||
)
|
||||
}
|
||||
|
||||
#echo paypal_bilan_tests_dev
|
||||
paypal_bilan_tests_dev() {
|
||||
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
/g/paypal/paypal_201?_??_complet.csv --invoices '1 50 200'
|
||||
|
||||
# Strange characters
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
/g/paypal/paypal_201?_??_complet.csv --invoices '389 234 96'
|
||||
|
||||
# France
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
/g/paypal/paypal_201?_??_complet.csv --invoices '9 392'
|
||||
|
||||
# individual
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan \
|
||||
/g/paypal/paypal_201?_??_complet.csv --invoices '313 415'
|
||||
|
||||
# /g/public_html/imapsync/paypal_reply/paypal_bilan /g/paypal/paypal_2011_03_complet.csv
|
||||
# pb with latex
|
||||
# Ok 10 # character
|
||||
# 65 clientAdrB Keyboard character used is undefined YOSHITO YONEI
|
||||
# Ok 84 Missing $ inserted. clientEmail victor_su@yahoo.com
|
||||
# 92 Dr. Westernacher & Partner GmbH
|
||||
|
||||
# /g/public_html/imapsync/paypal_reply/paypal_bilan --first_in 147 --invoices '242' /g/paypal/paypal_2010_1?_complet.csv
|
||||
}
|
|
@ -1,70 +1,98 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_bilan,v 1.23 2011/04/19 14:59:43 gilles Exp gilles $
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
use Text::CSV_XS ;
|
||||
use IO::Handle ;
|
||||
use Data::Dumper ;
|
||||
use Unicode::MapUTF8 qw(to_utf8 from_utf8 utf8_supported_charset);
|
||||
|
||||
my $total_usd_received ;
|
||||
my $total_usd_invoice ;
|
||||
die unless (utf8_supported_charset('ISO-8859-1'));
|
||||
|
||||
my $total_eur_received ;
|
||||
my $total_eur_invoice ;
|
||||
my $nb_invoice ;
|
||||
my $line ;
|
||||
my $total_usd_received = 0 ;
|
||||
my $total_usd_invoice = 0 ;
|
||||
my $total_HT_EUR_exo = 0 ;
|
||||
my $total_HT_EUR_ass = 0 ;
|
||||
my $total_TVA_EUR = 0 ;
|
||||
|
||||
my $total_eur_received = 0 ;
|
||||
my $total_eur_invoice = 0 ;
|
||||
my $nb_invoice = 0 ;
|
||||
my $nb_invoice_refund = 0 ;
|
||||
|
||||
while( $line = <> ) {
|
||||
next if ( $line =~ /^Date, Heure, Fuseau horaire, Nom, Type, Etat, Devise, Montant, Numéro d'avis de réception, Solde,/ ) ;
|
||||
#print( "A1 $line" ) ;
|
||||
chomp( $line ) ;
|
||||
#print ("A2 $line\n" );
|
||||
my $debug ;
|
||||
my $debug_csv ;
|
||||
my $debug_dev ;
|
||||
my $first_invoice = 1 ;
|
||||
my $print_details = '' ;
|
||||
my $bnc = '';
|
||||
my $usdeur = 1.2981 ;
|
||||
my $invoices ;
|
||||
my %invoice_refund ;
|
||||
my $write_invoices = 0;
|
||||
|
||||
my $dir_invoices = '/g/var/paypal_invoices' ;
|
||||
|
||||
my $option_ret = GetOptions (
|
||||
'debug' => \$debug,
|
||||
'debug_csv' => \$debug_csv,
|
||||
'debug_dev' => \$debug_dev,
|
||||
'first_invoice=i' => \$first_invoice,
|
||||
'print_details|details' => \$print_details,
|
||||
'bnc' => \$bnc,
|
||||
'usdeur=f' => \$usdeur,
|
||||
'invoices=s' => \$invoices,
|
||||
'write_invoices!' => \$write_invoices,
|
||||
);
|
||||
|
||||
my @files = @ARGV ;
|
||||
my %action_of_invoice ;
|
||||
|
||||
my @invoices = split( /\s+/, $invoices ) if $invoices ;
|
||||
|
||||
#print "@invoices\n" ;
|
||||
|
||||
foreach my $file ( @files ) {
|
||||
|
||||
my @actions = parse_file( $file ) ;
|
||||
|
||||
my $line2 = '",' . $line . '"' ;
|
||||
my( $Nothing, $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat, $Devise, $Montant, $Numero_davis_de_reception, $Solde )
|
||||
= split( '","', $line2 ) ;
|
||||
#print ( "[$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
|
||||
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'USD' eq $Devise
|
||||
and 'Terminé' eq $Etat
|
||||
) {
|
||||
$Montant =~tr/,/./;
|
||||
#print "$Montant\n" ;
|
||||
my $Montant2_usd;
|
||||
$Montant2_usd = 15 if ( 14.11 == $Montant or 14.19 == $Montant ) ;
|
||||
$Montant2_usd = 25 if ( 23.72 == $Montant or 23.85 == $Montant ) ;
|
||||
$Montant2_usd = 35 if ( 33.33 == $Montant or 33.51 == $Montant ) ;
|
||||
$Montant2_usd = 50 if ( 47.75 == $Montant or 14.19 == $Montant ) ;
|
||||
$Montant2_usd = 125 if ( 119.82 == $Montant or 119.82 == $Montant ) ;
|
||||
$Montant2_usd = 135 if ( 129.43 == $Montant or 129.43 == $Montant ) ;
|
||||
#print "$Montant $Montant2_usd\n" ;
|
||||
$total_usd_received += $Montant ;
|
||||
$total_usd_invoice += $Montant2_usd ;
|
||||
$nb_invoice++ ;
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Terminé' eq $Etat
|
||||
) {
|
||||
$Montant =~tr/,/./;
|
||||
#print "$Montant\n" ;
|
||||
my $Montant2_eur;
|
||||
$Montant2_eur = 22 if ( 20.88 == $Montant or 20.99 == $Montant ) ;
|
||||
$Montant2_eur = 30 if ( 28.58 == $Montant or 28.73 == $Montant ) ;
|
||||
$Montant2_eur = 110 if ( 105.46 == $Montant ) ;
|
||||
#print "$Montant $Montant2_eur\n" ;
|
||||
$total_eur_received += $Montant ;
|
||||
$total_eur_invoice += $Montant2_eur ;
|
||||
$nb_invoice++ ;
|
||||
foreach my $action (@actions) {
|
||||
my %action = %$action ;
|
||||
#print $action->{ Nom }, "\n" ;
|
||||
my( $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat,
|
||||
$Devise, $Montant, $Numero_davis_de_reception, $Solde,
|
||||
$Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe )
|
||||
= @action{ ( 'Date', 'Heure', 'Fuseau horaire', 'Nom', 'Type', 'Etat',
|
||||
'Devise', 'Montant', "Numéro d'avis de réception", 'Solde',
|
||||
'Pays', 'Nom Option 1', 'Valeur Option 1', 'Hors taxe') } ;
|
||||
#print "$Nom\n" ;
|
||||
my $invoice = 'NONE' ;
|
||||
$Montant = $action->{ Net } if not defined $Montant;
|
||||
compute_line($action, $invoice, $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat,
|
||||
$Devise, $Montant, $Numero_davis_de_reception, $Solde,
|
||||
$Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe ) ;
|
||||
|
||||
# index by invoice number
|
||||
$action_of_invoice{ $action->{ 'invoice' } } = $action ;
|
||||
}
|
||||
delete $action_of_invoice{ 'NONE' } ;
|
||||
}
|
||||
|
||||
@invoices = ( $first_invoice .. $first_invoice + $nb_invoice -1 ) if ( ! @invoices ) ;
|
||||
|
||||
foreach my $invoice ( @invoices ) {
|
||||
build_invoice( $invoice ) ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
print "USD banque $total_usd_received\n" ;
|
||||
print "USD invoice $total_usd_invoice\n" ;
|
||||
my $total_eur_from_usd ;
|
||||
$total_eur_from_usd = int( ( $total_usd_invoice / 1.2981 ) + 0.5 ) ; # au 30 nov 2010 http://fr.finance.yahoo.com/devises/convertisseur/#from=EUR;to=USD;amt=1
|
||||
$total_eur_from_usd = int( ( $total_usd_invoice / $usdeur ) + 0.5 ) ; # au 30 nov 2010 http://fr.finance.yahoo.com/devises/convertisseur/#from=EUR;to=USD;amt=1
|
||||
print "EUR from USD $total_eur_from_usd\n" ;
|
||||
#$total_eur = int( ( $total_eur_invoice / 1.3 ) + 0.5 ) ;
|
||||
#print "EUR $total_eur_from_usd\n" ;
|
||||
|
@ -72,10 +100,674 @@ print "EUR banque $total_eur_received\n" ;
|
|||
print "EUR invoice $total_eur_invoice\n" ;
|
||||
|
||||
my $total_eur = $total_eur_from_usd + $total_eur_invoice ;
|
||||
print "EUR total $total_eur\n" ;
|
||||
print "Nb invoice $nb_invoice\n" ;
|
||||
|
||||
$total_HT_EUR_exo = sprintf('%2.f', $total_HT_EUR_exo) ;
|
||||
$total_HT_EUR_ass = sprintf('%2.f', $total_HT_EUR_ass) ;
|
||||
$total_TVA_EUR = sprintf('%2.f', $total_TVA_EUR) ;
|
||||
|
||||
$total_eur = sprintf('%2.f', $total_eur) ;
|
||||
|
||||
print "EUR total $total_eur\n" ;
|
||||
print "EUR total HT exo $total_HT_EUR_exo\n" ;
|
||||
print "EUR total HT assuj $total_HT_EUR_ass\n" ;
|
||||
print "EUR total TVA $total_TVA_EUR\n" ;
|
||||
print "Nb invoice $nb_invoice\n" ;
|
||||
print "Nb invoice refund $nb_invoice_refund\n" ;
|
||||
|
||||
print "$total_eur != $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR\n"
|
||||
if ( $total_eur != $total_HT_EUR_exo + $total_HT_EUR_ass + $total_TVA_EUR ) ;
|
||||
|
||||
sub parse_one_line_io {
|
||||
my $csv = shift ;
|
||||
my $io = shift ;
|
||||
|
||||
my $line = $csv->getline($io) ;
|
||||
|
||||
return if ( $csv->eof( ) ) ;
|
||||
if ( not defined( $line ) ) {
|
||||
my($cde, $str, $pos) = $csv->error_diag () ;
|
||||
print "[$cde] [$str] [$pos]\n" ;
|
||||
|
||||
}
|
||||
return( $line ) ;
|
||||
}
|
||||
|
||||
sub hash_and_count_dupplicate {
|
||||
my @columns = @_ ;
|
||||
my %columns ;
|
||||
|
||||
#@columns_def{ @columns_def } = ( ) ;
|
||||
foreach my $col ( @columns ) {
|
||||
$columns{ $col } += 1 ;
|
||||
}
|
||||
$debug_csv and print "Nb columns: ", scalar( keys %columns ), " ", scalar( @columns ), "\n" ;
|
||||
# debug how many time a title is defined
|
||||
foreach my $col (1 .. scalar( @columns )) {
|
||||
$debug_csv and print "$col | ",
|
||||
deci_to_AA( $col ) , " | ",
|
||||
$columns{ $columns[ $col - 1 ] }, " | ",
|
||||
$columns[ $col - 1 ], "\n" ;
|
||||
}
|
||||
|
||||
# exit in case two columns have the same name
|
||||
die "Erreur : doublons dans les titres\n" if ( scalar( keys %columns ) != scalar( @columns ) ) ;
|
||||
|
||||
return( %columns ) ;
|
||||
}
|
||||
|
||||
sub deci_to_AA {
|
||||
my $deci = shift ;
|
||||
my $AA = '';
|
||||
|
||||
while ( $deci > 0 ) {
|
||||
my $quot = int( ( $deci - 1 ) / 26 ) ;
|
||||
my $rest = $deci - 1 - ( 26 * $quot ) ;
|
||||
my $char = chr ( ord('A') + $rest ) ;
|
||||
$AA = $char . $AA ;
|
||||
$deci = $quot ;
|
||||
}
|
||||
#print "col=$AA\n" ;
|
||||
return( $AA ) ;
|
||||
}
|
||||
|
||||
sub remove_first_blank {
|
||||
my $string = shift ;
|
||||
|
||||
$string =~ s/^ +// ;
|
||||
return( $string ) ;
|
||||
|
||||
}
|
||||
|
||||
sub parse_file {
|
||||
my $file = shift ;
|
||||
|
||||
open my $io, "<", $file or die "$file: $!" ;
|
||||
|
||||
my $csv = Text::CSV_XS->new( {
|
||||
sep_char => ',',
|
||||
binary => 1,
|
||||
keep_meta_info => 1,
|
||||
eol => $/,
|
||||
} ) ;
|
||||
|
||||
my $line_1 = parse_one_line_io( $csv, $io ) ;
|
||||
die if ( not defined $line_1 ) ; # first line must have no problem
|
||||
|
||||
my @columns_def_orig = @$line_1 ;
|
||||
my @columns_def = map { remove_first_blank( $_ ) } @columns_def_orig ;
|
||||
$debug_csv and print "columns_def = ", map( { "[$_]" } @columns_def ), "\n";
|
||||
|
||||
my %columns_def = hash_and_count_dupplicate( @columns_def ) ;
|
||||
my $nb_columns_def = scalar @columns_def ;
|
||||
|
||||
my $line_counter = 2 ;
|
||||
my @actions ;
|
||||
while ( 1 ) {
|
||||
$debug_csv and print "ligne $line_counter ", $csv->eof( ), "\n" ;
|
||||
my $line = parse_one_line_io( $csv, $io ) ;
|
||||
last if ( $csv->eof( ) ) ;
|
||||
if ( not defined $line ) {
|
||||
print "Erreur ligne $line_counter : ", $csv->error_diag, "\n\n";
|
||||
++$line_counter ;
|
||||
next ;
|
||||
}
|
||||
my @columns = @$line ;
|
||||
|
||||
if ( $nb_columns_def != scalar @columns ) {
|
||||
print "Erreur ligne $line_counter : nombre de colonnes = ", scalar @columns, " != $nb_columns_def\n" ;
|
||||
++$line_counter ;
|
||||
next ;
|
||||
}
|
||||
my %columns ;
|
||||
@columns{ @columns_def } = @columns ;
|
||||
$columns{ 'file_csv' } = $file ;
|
||||
$columns{ 'line_number' } = $line_counter ;
|
||||
$csv->combine( @columns ) ;
|
||||
my $line_csv = $csv->string();
|
||||
$columns{ 'line_csv' } = $line_csv ;
|
||||
$debug_csv and print map( { "[$_] = [" . $columns{$_} . "]\n" }
|
||||
@columns_def, 'line_number', 'line_csv', 'file_csv' ),
|
||||
"\n";
|
||||
++$line_counter ;
|
||||
push( @actions, \%columns ) ;
|
||||
}
|
||||
close( $io );
|
||||
return( reverse @actions ) ;
|
||||
}
|
||||
|
||||
sub compute_line {
|
||||
my( $action, $invoice, $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat,
|
||||
$Devise, $Montant, $Numero_davis_de_reception, $Solde,
|
||||
$Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe_paypal ) = @_ ;
|
||||
|
||||
$debug and print( "[$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n",
|
||||
"[$Pays] [$Nom_Option_1] [$Valeur_Option_1]\n" ) ;
|
||||
#$debug_dev and print "$Hors_taxe_paypal\n" ;
|
||||
|
||||
$Montant =~ s/[^0-9-,.]//g ;
|
||||
$Montant =~ s/,/./g ;
|
||||
#$debug and print "MM[$Montant]\n" ;
|
||||
$Hors_taxe_paypal =~ s/,/./g ;
|
||||
|
||||
my $MontantEUR;
|
||||
my( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) ;
|
||||
if ( $bnc ) {
|
||||
$MontantEUR = $Montant ;
|
||||
$MontantEUR = sprintf( "%.4f", $Montant/$usdeur ) if ($Devise eq 'USD') ;
|
||||
print( "\n", "=" x 60, "\n" ) ;
|
||||
print( "[$Date] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [EUR $MontantEUR]\n",
|
||||
"[$Pays] [$Nom_Option_1] [$Valeur_Option_1]\n" ) ;
|
||||
}
|
||||
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'USD' eq $Devise
|
||||
and ( 'Terminé' eq $Etat or 'Compensé' eq $Etat )
|
||||
) {
|
||||
$Montant =~tr/,/./;
|
||||
#print "$Montant\n" ;
|
||||
my $Montant2_usd;
|
||||
$Montant2_usd = $Hors_taxe_paypal ;
|
||||
$total_usd_received += $Montant ;
|
||||
$total_usd_invoice += $Montant2_usd ;
|
||||
( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) = tva_line( $Devise, $Montant2_usd, $Pays, $Nom_Option_1, $Valeur_Option_1 ) ;
|
||||
$total_HT_EUR_exo += $montant_HT_EUR_exo ;
|
||||
$total_HT_EUR_ass += $montant_HT_EUR_ass ;
|
||||
$total_TVA_EUR += $montant_TVA_EUR ;
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and ( 'Terminé' eq $Etat or 'Compensé' eq $Etat )
|
||||
) {
|
||||
$Montant =~tr/,/./;
|
||||
#print "$Montant\n" ;
|
||||
my $Montant2_eur;
|
||||
$Montant2_eur = $Hors_taxe_paypal ;
|
||||
$total_eur_received += $Montant ;
|
||||
$total_eur_invoice += $Montant2_eur ;
|
||||
( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) = tva_line( $Devise, $Montant2_eur, $Pays, $Nom_Option_1, $Valeur_Option_1 ) ;
|
||||
$total_HT_EUR_exo += $montant_HT_EUR_exo ;
|
||||
$total_HT_EUR_ass += $montant_HT_EUR_ass ;
|
||||
$total_TVA_EUR += $montant_TVA_EUR ;
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Remboursé' eq $Etat
|
||||
) {
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$nb_invoice_refund++;
|
||||
$invoice_refund{ $invoice }++ ;
|
||||
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Non compensé' eq $Etat
|
||||
) {
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
|
||||
$action->{ 'invoice' } = $invoice ;
|
||||
if ( $bnc ) {
|
||||
my $FR_flag = '' ;
|
||||
$FR_flag = ' FR' if $Pays eq 'France' ;
|
||||
my $IND_flag = '' ;
|
||||
$IND_flag = ' IND' if ('imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 ) ;
|
||||
print "FE $invoice$FR_flag$IND_flag\n" ;
|
||||
print "Facture $invoice imapsync$FR_flag $Nom\n" ;
|
||||
printf( "%.2f [EUR %.2f]\n", $Montant, $MontantEUR ) ;
|
||||
}
|
||||
}
|
||||
|
||||
sub build_invoice {
|
||||
my $invoice = shift ;
|
||||
|
||||
return if ! $invoice ;
|
||||
|
||||
my $action = $action_of_invoice{ $invoice } ;
|
||||
my $refund = '' ;
|
||||
$refund = 'REFUND ' if $invoice_refund{ $invoice } ;
|
||||
my %action = %$action if $action ;
|
||||
#print Data::Dumper->Dump( [$action] ) ;
|
||||
|
||||
my( $Date, $Heure, $Nom, $Type, $Etat, $Devise, $Hors_taxe, $Commission, $Net,
|
||||
$De_l_adresse_email, $A_l_adresse_email, $N_de_transaction, $Titre_de_l_objet,
|
||||
$TVA, $Nom_Option_1, $Valeur_Option_1, $N_de_transaction_de_reference,
|
||||
$Adresse_1, $Adresse_2_district_quartier, $Ville,
|
||||
$Etat_Province, $Code_postal, $Pays, $line_number, $line_csv, $file_csv )
|
||||
= @action{ ( 'Date', 'Heure', 'Nom', 'Type', 'Etat', 'Devise', 'Hors taxe', 'Commission', 'Net',
|
||||
"De l'adresse email", "A l'adresse email", 'N° de transaction', "Titre de l'objet",
|
||||
'TVA', 'Nom Option 1', 'Valeur Option 1', 'Nº de transaction de référence',
|
||||
'Adresse 1', 'Adresse 2/district/quartier', 'Ville',
|
||||
'Etat/Province/Région/Comté/Territoire/Préfecture/République', 'Code postal', 'Pays', 'line_number', 'line_csv', 'file_csv' ) } ;
|
||||
|
||||
#print "$Hors_taxe $Devise\n" ;
|
||||
my $Hors_taxe_num = $Hors_taxe ;
|
||||
$Hors_taxe_num =~ s{,}{.} ;
|
||||
if ($Hors_taxe_num > 100) {
|
||||
print "invoice $invoice $Hors_taxe_num > 100\n" ;
|
||||
#return() ;
|
||||
}
|
||||
|
||||
my ( $email_message_header, $email_message_body )
|
||||
= build_email_message( $Date, $Nom, $De_l_adresse_email, $invoice ) ;
|
||||
if ( $write_invoices ) {
|
||||
write_email_message( $dir_invoices, $invoice,
|
||||
$email_message_header, $email_message_body,
|
||||
$De_l_adresse_email) ;
|
||||
write_csv_info( $dir_invoices, $invoice, $file_csv, $line_number, $line_csv ) ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#print "==== $invoice $refund=================================================" ;
|
||||
#print $email_message ;
|
||||
|
||||
my(
|
||||
$clientAdrA,
|
||||
$clientAdrB,
|
||||
$clientAdrC,
|
||||
$clientAdrD,
|
||||
$clientAdrE,
|
||||
$clientAdrF,
|
||||
)
|
||||
= build_adress(
|
||||
$Nom,
|
||||
$Adresse_1,
|
||||
$Adresse_2_district_quartier,
|
||||
$Ville,
|
||||
$Code_postal,
|
||||
$Etat_Province,
|
||||
$Pays,
|
||||
) ;
|
||||
|
||||
foreach my $str (
|
||||
$De_l_adresse_email,
|
||||
$Nom,
|
||||
$clientAdrA,
|
||||
$clientAdrB,
|
||||
$clientAdrC,
|
||||
$clientAdrD,
|
||||
$clientAdrE,
|
||||
$clientAdrF,
|
||||
) {
|
||||
$str =~ s{#}{\\#}g ;
|
||||
$str =~ s{_}{\\_}g ;
|
||||
$str =~ s{&}{\\&}g ;
|
||||
}
|
||||
|
||||
my ( $clientTypeEN, $clientTypeFR ) = client_type( $Nom_Option_1, $Valeur_Option_1 ) ;
|
||||
|
||||
my (
|
||||
$priceHT,
|
||||
$tvaFR,
|
||||
$tvaEN,
|
||||
$priceTVA,
|
||||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$priceTTCusd
|
||||
)
|
||||
= tva_stuff( $clientTypeEN, $Pays, $Hors_taxe, $Devise ) ;
|
||||
|
||||
my ( $urlSrc, $urlExe ) = download_urls( $Date ) ;
|
||||
my $tex_variables = qq{
|
||||
%% Begin input from $0
|
||||
\\providecommand{\\invoiceNumber}{$invoice}
|
||||
\\providecommand{\\clientName}{$Nom}
|
||||
\\providecommand{\\clientEmail}{$De_l_adresse_email}
|
||||
\\providecommand{\\clientTypeEN}{$clientTypeEN}
|
||||
\\providecommand{\\clientTypeFR}{$clientTypeFR}
|
||||
\\providecommand{\\clientAdrA}{$clientAdrA}
|
||||
\\providecommand{\\clientAdrB}{$clientAdrB}
|
||||
\\providecommand{\\clientAdrC}{$clientAdrC}
|
||||
\\providecommand{\\clientAdrD}{$clientAdrD}
|
||||
\\providecommand{\\clientAdrE}{$clientAdrE}
|
||||
\\providecommand{\\clientAdrF}{$clientAdrF}
|
||||
\\providecommand{\\invoiceDate}{$Date}
|
||||
\\providecommand{\\invoiceHour}{$Heure}
|
||||
\\providecommand{\\priceHT}{$priceHT}
|
||||
\\providecommand{\\tvaFR}{$tvaFR}
|
||||
\\providecommand{\\tvaEN}{$tvaEN}
|
||||
\\providecommand{\\priceTVA}{$priceTVA}
|
||||
\\providecommand{\\priceTTC}{$priceTTC}
|
||||
\\providecommand{\\priceTTCusd}{$priceTTCusd}
|
||||
\\providecommand{\\messageTVAFR}{$messageTVAFR}
|
||||
\\providecommand{\\messageTVAEN}{$messageTVAEN}
|
||||
\\providecommand{\\urlSrc}{\\url{$urlSrc}}
|
||||
\\providecommand{\\urlExe}{\\url{$urlExe}}
|
||||
%% End input from $0
|
||||
} ;
|
||||
|
||||
|
||||
#print $tex_variables ;
|
||||
|
||||
write_tex_variables_file( $dir_invoices,
|
||||
$invoice, $Date, $tex_variables ) if $write_invoices ;
|
||||
|
||||
}
|
||||
|
||||
sub build_email_message {
|
||||
|
||||
my ( $date, $name, $email, $invoice ) = @_ ;
|
||||
|
||||
my $message_header = qq{X-imapsync: invoice $invoice
|
||||
From: Gilles LAMIRAL <gilles.lamiral\@laposte.net>
|
||||
Bcc: gilles\@lamiral.info
|
||||
Subject: [imapsync invoice] $invoice ($date)
|
||||
Disposition-Notification-To: Gilles LAMIRAL <gilles.lamiral\@laposte.net>
|
||||
} ;
|
||||
|
||||
|
||||
my $message_body = qq{
|
||||
Hello $name,
|
||||
|
||||
First I'm sorry for the delay to prepare and send you this message.
|
||||
|
||||
Attached is the invoice of imapsync software you bought ($date).
|
||||
The invoice file is named facture_imapsync-${invoice}.pdf
|
||||
This invoice is in PDF format, ready to be print.
|
||||
|
||||
If you need this invoice on paper, just ask me then
|
||||
I will send it to you by postal mail.
|
||||
|
||||
In order to respect the law, this numeric invoice PDF
|
||||
file is signed with my private gpg key.
|
||||
|
||||
The resulting gpg signature is in the file named
|
||||
facture_imapsync-${invoice}.pdf.asc
|
||||
also attached in this email message.
|
||||
|
||||
You can verify I (Gilles LAMIRAL) really generated
|
||||
this invoice with the following command line
|
||||
|
||||
gpg --verify facture_imapsync-${invoice}.pdf.asc facture_imapsync-${invoice}.pdf
|
||||
|
||||
or any other gpg graphical tool.
|
||||
|
||||
I thank you again for buying and using imapsync.
|
||||
|
||||
Any feedback is welcome.
|
||||
|
||||
--
|
||||
Au revoir, 09 51 84 42 42
|
||||
Gilles Lamiral. France, Baulon (35580) 06 20 79 76 06
|
||||
} ;
|
||||
|
||||
my $message_body_blabla = qq{
|
||||
Here is the fingerprint of my public key
|
||||
pub 1024D/FDA2B3DC 2002-05-08
|
||||
Key fingerprint = 7906 F53D 0D62 0C67 304A 4CF0 6928 869B FDA2 B3DC
|
||||
uid Gilles LAMIRAL <gilles.lamiral\@laposte.net>
|
||||
sub 1024g/A2C4CB42 2002-05-08
|
||||
|
||||
Of course the verification doesn't prove anything until
|
||||
all the following conditions are met:
|
||||
- you met me,
|
||||
- I agree that the fingerprint above is really mine
|
||||
- I prove I'm Gilles LAMIRAL with an official paper.
|
||||
|
||||
Normally we won't have to verify anything unless
|
||||
I disagree with this invoice and the payment
|
||||
you made for imapsync.
|
||||
} ;
|
||||
|
||||
return( $message_header, $message_body ) ;
|
||||
|
||||
}
|
||||
|
||||
sub write_csv_info {
|
||||
|
||||
my( $dir_invoices, $invoice, $file_csv, $line_number, $line_csv ) = @_ ;
|
||||
|
||||
open( CSVINFO, "> $dir_invoices/$invoice/csv_info.txt") or die ;
|
||||
print CSVINFO join( "\n", $file_csv, $line_number, $line_csv ) ;
|
||||
close( CSVINFO ) ;
|
||||
|
||||
}
|
||||
|
||||
sub write_email_message {
|
||||
my ( $dir_invoices, $invoice, $message_header, $message_body, $email_address ) = @_ ;
|
||||
|
||||
my $message_body_utf8 = to_utf8({ -string => $message_body, -charset => 'ISO-8859-1' });
|
||||
|
||||
mkdir( "$dir_invoices/$invoice" ) or die if ! -d "$dir_invoices/$invoice" ;
|
||||
|
||||
open( HEADER, "> $dir_invoices/$invoice/facture_message_header.txt") or die ;
|
||||
print HEADER $message_header ;
|
||||
close( HEADER ) ;
|
||||
|
||||
open( BODY, "> $dir_invoices/$invoice/facture_message_body.txt") or die ;
|
||||
print BODY $message_body_utf8 ;
|
||||
close( BODY ) ;
|
||||
|
||||
open( ADDRESS, "> $dir_invoices/$invoice/email_address.txt") or die ;
|
||||
print ADDRESS "$email_address\n" ;
|
||||
close( ADDRESS ) ;
|
||||
}
|
||||
|
||||
|
||||
sub write_tex_variables_file {
|
||||
my ( $dir_invoices, $invoice, $date_jjSmmSaaaa, $tex_variables ) = @_ ;
|
||||
|
||||
my $tex_variables_utf8 = to_utf8({ -string => $tex_variables, -charset => 'ISO-8859-1' });
|
||||
mkdir( "$dir_invoices/$invoice" ) or die if ! -d "$dir_invoices/$invoice" ;
|
||||
open( FILE, "> $dir_invoices/$invoice/imapsync_var.tex") or die ;
|
||||
print FILE $tex_variables_utf8 ;
|
||||
close( FILE ) ;
|
||||
|
||||
}
|
||||
|
||||
sub download_urls {
|
||||
my $date_jjSmmSaaaa = shift ;
|
||||
|
||||
my $date_aaaa_mm_jj = date_aaaa_mm_jj( $date_jjSmmSaaaa ) ;
|
||||
# print "$date_aaaa_mm_jj $date_jjSmmSaaaa\n" ;
|
||||
my ( $urlSrc, $urlExe ) ;
|
||||
|
||||
if ('2011_03_24' le $date_aaaa_mm_jj) {
|
||||
$urlSrc = 'http://www.linux-france.org/prj/imapsync/paypal_return.shtml' ;
|
||||
$urlExe = '' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
if ('2011_02_21' le $date_aaaa_mm_jj) {
|
||||
$urlSrc = 'http://www.linux-france.org/depot/2011_02_21/OUMbo7/' ;
|
||||
$urlExe = 'http://www.linux-france.org/depot/2011_02_21/rHSVNs/' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
if ('2011_01_18' le $date_aaaa_mm_jj) {
|
||||
$urlSrc = 'http://www.linux-france.org/depot/2011_01_18/zPRRNt/' ;
|
||||
$urlExe = 'http://www.linux-france.org/depot/2011_01_18/FO1QzG/' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
if ('2011_01_18' le $date_aaaa_mm_jj) {
|
||||
$urlSrc = 'http://www.linux-france.org/depot/2010_11_28/SiNdlZ/' ;
|
||||
$urlExe = 'http://www.linux-france.org/depot/2010_11_28/R3ZAyr/' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
$urlSrc = 'http://www.linux-france.org/depot/2010_11_08/X2PWMe/' ;
|
||||
$urlExe = 'http://www.linux-france.org/depot/2010_11_08/ZZ7zSc/' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
|
||||
sub date_aaaa_mm_jj {
|
||||
my $date_jjSmmSaaaa = shift ;
|
||||
|
||||
if ( $date_jjSmmSaaaa =~ m{(\d\d)/(\d\d)/(\d\d\d\d)} ) {
|
||||
my( $jj, $mm, $aaaa ) = ( $1, $2, $3 ) ;
|
||||
return( join( '_', $aaaa, $mm, $jj ) ) ;
|
||||
}else{
|
||||
return( '9999_12_31' ) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub tva_line {
|
||||
my( $Devise, $Montant2, $Pays, $Nom_Option_1, $Valeur_Option_1 ) = @_ ;
|
||||
my( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) ;
|
||||
|
||||
$Montant2 = $Montant2/$usdeur if 'USD' eq $Devise ;
|
||||
|
||||
if (
|
||||
( 'imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 )
|
||||
or
|
||||
( 'France' eq $Pays )
|
||||
) {
|
||||
$montant_HT_EUR_exo = 0 ;
|
||||
$montant_HT_EUR_ass = $Montant2 / 1.196 ;
|
||||
$montant_TVA_EUR = $Montant2 / 1.196 * 0.196 ;
|
||||
$debug_dev and print "$Montant2 $Pays $Valeur_Option_1\n" ;
|
||||
}else{
|
||||
$montant_HT_EUR_exo = $Montant2 ;
|
||||
$montant_HT_EUR_ass = 0 ;
|
||||
$montant_TVA_EUR = 0 ;
|
||||
}
|
||||
return( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub tva_stuff {
|
||||
my( $clientTypeEN, $Pays, $Hors_taxe, $Devise ) = @_ ;
|
||||
|
||||
my $priceTTCusd = '' ;
|
||||
$Hors_taxe =~ s{,}{.} ;
|
||||
|
||||
if ( $Devise eq 'USD' ) {
|
||||
$priceTTCusd = "(USD $Hors_taxe)" ;
|
||||
$Hors_taxe = ( $Hors_taxe/$usdeur ) ;
|
||||
}
|
||||
|
||||
my (
|
||||
$priceHT,
|
||||
$tvaFR,
|
||||
$tvaEN,
|
||||
$priceTVA,
|
||||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
) ;
|
||||
|
||||
if ( ( 'individual' eq $clientTypeEN)
|
||||
or
|
||||
( 'France' eq $Pays )
|
||||
) {
|
||||
$priceHT = sprintf('%2.2f', $Hors_taxe/1.196) ;
|
||||
$tvaFR = '19,60\%';
|
||||
$tvaEN = '';
|
||||
$priceTVA = sprintf('%2.2f', $Hors_taxe/1.196*0.196) ;
|
||||
$priceTTC = sprintf('%2.2f', $Hors_taxe) ;
|
||||
$messageTVAFR = '';
|
||||
$messageTVAEN = '';
|
||||
}else{
|
||||
$priceHT = sprintf('%2.2f', $Hors_taxe) ;
|
||||
$tvaFR = 'néant';
|
||||
$tvaEN = '(none)';
|
||||
$priceTVA = 0 ;
|
||||
$priceTTC = $priceHT;
|
||||
$messageTVAFR = 'Exonération de TVA, article 259 B-1 du Code Général des Impôts';
|
||||
$messageTVAEN = '(VAT tax-exempt, article 259 B-1 French General Tax Code)';
|
||||
}
|
||||
foreach my $price ( $priceHT, $priceTVA, $priceTTC, $priceTTCusd ) {
|
||||
#print "[$price]\n" ;
|
||||
$price =~ s{\.}{, } ;
|
||||
}
|
||||
return(
|
||||
$priceHT,
|
||||
$tvaFR,
|
||||
$tvaEN,
|
||||
$priceTVA,
|
||||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$priceTTCusd
|
||||
) ;
|
||||
}
|
||||
|
||||
sub client_type {
|
||||
my ( $Nom_Option_1, $Valeur_Option_1 ) = @_ ;
|
||||
|
||||
my ( $clientTypeEN, $clientTypeFR ) = ( 'professional', 'professionnel' ) ;
|
||||
|
||||
if ('imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 ) {
|
||||
$clientTypeEN = 'individual' ;
|
||||
$clientTypeFR = 'individuel' ;
|
||||
}elsif ('imapsync usage' eq $Nom_Option_1 and 'professional' eq $Valeur_Option_1 ) {
|
||||
$clientTypeEN = 'professional' ;
|
||||
$clientTypeFR = 'professionnel' ;
|
||||
}
|
||||
|
||||
return( $clientTypeEN, $clientTypeFR ) ;
|
||||
}
|
||||
|
||||
sub build_adress {
|
||||
my(
|
||||
$Nom,
|
||||
$Adresse_1,
|
||||
$Adresse_2_district_quartier,
|
||||
$Ville,
|
||||
$Code_postal,
|
||||
$Etat_Province,
|
||||
$Pays,
|
||||
) = @_ ;
|
||||
|
||||
my $addr = "
|
||||
===========================================================
|
||||
Nom $Nom
|
||||
Adresse_1 $Adresse_1
|
||||
Adresse_2_district_quartier $Adresse_2_district_quartier
|
||||
Ville Code_postal $Ville $Code_postal
|
||||
Etat_Province $Etat_Province
|
||||
Pays $Pays
|
||||
" ;
|
||||
#print $addr ;
|
||||
|
||||
my @address ;
|
||||
$Nom = '' if ( $Nom =~ m/^\s+$/ ) ;
|
||||
push( @address, $Nom ) if $Nom ;
|
||||
push( @address, $Adresse_1 ) if $Adresse_1 ;
|
||||
push( @address, $Adresse_2_district_quartier ) if $Adresse_2_district_quartier ;
|
||||
push( @address, "$Ville $Code_postal" ) if ( $Ville or $Code_postal );
|
||||
push( @address, $Etat_Province ) if $Etat_Province ;
|
||||
push( @address, $Pays, ) if $Pays ;
|
||||
|
||||
|
||||
my $clientAdrA = shift( @address ) || '' ;
|
||||
my $clientAdrB = shift( @address ) || '' ;
|
||||
my $clientAdrC = shift( @address ) || '' ;
|
||||
my $clientAdrD = shift( @address ) || '' ;
|
||||
my $clientAdrE = shift( @address ) || '' ;
|
||||
my $clientAdrF = shift( @address ) || '' ;
|
||||
|
||||
$addr = "
|
||||
[$clientAdrA]
|
||||
[$clientAdrB]
|
||||
[$clientAdrC]
|
||||
[$clientAdrD]
|
||||
[$clientAdrE]
|
||||
[$clientAdrF]
|
||||
";
|
||||
#print $addr ;
|
||||
|
||||
return(
|
||||
$clientAdrA,
|
||||
$clientAdrB,
|
||||
$clientAdrC,
|
||||
$clientAdrD,
|
||||
$clientAdrE,
|
||||
$clientAdrF,
|
||||
) ;
|
||||
}
|
||||
|
|
756
paypal_reply/paypal_bilan_1.22
Executable file
756
paypal_reply/paypal_bilan_1.22
Executable file
|
@ -0,0 +1,756 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_bilan,v 1.22 2011/04/19 12:52:27 gilles Exp gilles $
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
use Text::CSV_XS ;
|
||||
use IO::Handle ;
|
||||
use Data::Dumper ;
|
||||
use Unicode::MapUTF8 qw(to_utf8 from_utf8 utf8_supported_charset);
|
||||
|
||||
die unless (utf8_supported_charset('ISO-8859-1'));
|
||||
|
||||
my $total_usd_received = 0 ;
|
||||
my $total_usd_invoice = 0 ;
|
||||
|
||||
my $total_eur_received = 0 ;
|
||||
my $total_eur_invoice = 0 ;
|
||||
my $nb_invoice = 0 ;
|
||||
my $nb_invoice_refund = 0 ;
|
||||
|
||||
my $debug ;
|
||||
my $debug_csv ;
|
||||
my $debug_dev ;
|
||||
my $first_invoice = 1 ;
|
||||
my $print_details = '' ;
|
||||
my $bnc = '';
|
||||
my $usdeur = 1.2981 ;
|
||||
my $invoices ;
|
||||
my %invoice_refund ;
|
||||
my $write_invoices = 0;
|
||||
|
||||
my $dir_invoices = '/g/var/paypal_invoices' ;
|
||||
|
||||
my $option_ret = GetOptions (
|
||||
'debug' => \$debug,
|
||||
'debug_csv' => \$debug_csv,
|
||||
'debug_dev' => \$debug_dev,
|
||||
'first_invoice=i' => \$first_invoice,
|
||||
'print_details|details' => \$print_details,
|
||||
'bnc' => \$bnc,
|
||||
'usdeur=f' => \$usdeur,
|
||||
'invoices=s' => \$invoices,
|
||||
'write_invoices!' => \$write_invoices,
|
||||
);
|
||||
|
||||
my @files = @ARGV ;
|
||||
my %action_of_invoice ;
|
||||
|
||||
my @invoices = split( /\s+/, $invoices ) if $invoices ;
|
||||
|
||||
#print "@invoices\n" ;
|
||||
|
||||
foreach my $file ( @files ) {
|
||||
|
||||
my @actions = parse_file( $file ) ;
|
||||
|
||||
foreach my $action (@actions) {
|
||||
my %action = %$action ;
|
||||
#print $action->{ Nom }, "\n" ;
|
||||
my( $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat,
|
||||
$Devise, $Montant, $Numero_davis_de_reception, $Solde,
|
||||
$Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe )
|
||||
= @action{ ( 'Date', 'Heure', 'Fuseau horaire', 'Nom', 'Type', 'Etat',
|
||||
'Devise', 'Montant', "Numéro d'avis de réception", 'Solde',
|
||||
'Pays', 'Nom Option 1', 'Valeur Option 1', 'Hors taxe') } ;
|
||||
#print "$Nom\n" ;
|
||||
my $invoice = 'NONE' ;
|
||||
$Montant = $action->{ Net } if not defined $Montant;
|
||||
compute_line($action, $invoice, $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat,
|
||||
$Devise, $Montant, $Numero_davis_de_reception, $Solde,
|
||||
$Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe ) ;
|
||||
|
||||
# index by invoice number
|
||||
$action_of_invoice{ $action->{ 'invoice' } } = $action ;
|
||||
}
|
||||
delete $action_of_invoice{ 'NONE' } ;
|
||||
}
|
||||
|
||||
@invoices = ( $first_invoice .. $first_invoice + $nb_invoice -1 ) if ( ! @invoices ) ;
|
||||
|
||||
foreach my $invoice ( @invoices ) {
|
||||
build_invoice( $invoice ) ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
print "USD banque $total_usd_received\n" ;
|
||||
print "USD invoice $total_usd_invoice\n" ;
|
||||
my $total_eur_from_usd ;
|
||||
$total_eur_from_usd = int( ( $total_usd_invoice / $usdeur ) + 0.5 ) ; # au 30 nov 2010 http://fr.finance.yahoo.com/devises/convertisseur/#from=EUR;to=USD;amt=1
|
||||
print "EUR from USD $total_eur_from_usd\n" ;
|
||||
#$total_eur = int( ( $total_eur_invoice / 1.3 ) + 0.5 ) ;
|
||||
#print "EUR $total_eur_from_usd\n" ;
|
||||
print "EUR banque $total_eur_received\n" ;
|
||||
print "EUR invoice $total_eur_invoice\n" ;
|
||||
|
||||
my $total_eur = $total_eur_from_usd + $total_eur_invoice ;
|
||||
print "EUR total $total_eur\n" ;
|
||||
print "Nb invoice $nb_invoice\n" ;
|
||||
print "Nb invoice refund $nb_invoice_refund\n" ;
|
||||
|
||||
|
||||
sub parse_one_line_io {
|
||||
my $csv = shift ;
|
||||
my $io = shift ;
|
||||
|
||||
my $line = $csv->getline($io) ;
|
||||
|
||||
return if ( $csv->eof( ) ) ;
|
||||
if ( not defined( $line ) ) {
|
||||
my($cde, $str, $pos) = $csv->error_diag () ;
|
||||
print "[$cde] [$str] [$pos]\n" ;
|
||||
|
||||
}
|
||||
return( $line ) ;
|
||||
}
|
||||
|
||||
sub hash_and_count_dupplicate {
|
||||
my @columns = @_ ;
|
||||
my %columns ;
|
||||
|
||||
#@columns_def{ @columns_def } = ( ) ;
|
||||
foreach my $col ( @columns ) {
|
||||
$columns{ $col } += 1 ;
|
||||
}
|
||||
$debug_csv and print "Nb columns: ", scalar( keys %columns ), " ", scalar( @columns ), "\n" ;
|
||||
# debug how many time a title is defined
|
||||
foreach my $col (1 .. scalar( @columns )) {
|
||||
$debug_csv and print "$col | ",
|
||||
deci_to_AA( $col ) , " | ",
|
||||
$columns{ $columns[ $col - 1 ] }, " | ",
|
||||
$columns[ $col - 1 ], "\n" ;
|
||||
}
|
||||
|
||||
# exit in case two columns have the same name
|
||||
die "Erreur : doublons dans les titres\n" if ( scalar( keys %columns ) != scalar( @columns ) ) ;
|
||||
|
||||
return( %columns ) ;
|
||||
}
|
||||
|
||||
sub deci_to_AA {
|
||||
my $deci = shift ;
|
||||
my $AA = '';
|
||||
|
||||
while ( $deci > 0 ) {
|
||||
my $quot = int( ( $deci - 1 ) / 26 ) ;
|
||||
my $rest = $deci - 1 - ( 26 * $quot ) ;
|
||||
my $char = chr ( ord('A') + $rest ) ;
|
||||
$AA = $char . $AA ;
|
||||
$deci = $quot ;
|
||||
}
|
||||
#print "col=$AA\n" ;
|
||||
return( $AA ) ;
|
||||
}
|
||||
|
||||
sub remove_first_blank {
|
||||
my $string = shift ;
|
||||
|
||||
$string =~ s/^ +// ;
|
||||
return( $string ) ;
|
||||
|
||||
}
|
||||
|
||||
sub parse_file {
|
||||
my $file = shift ;
|
||||
|
||||
open my $io, "<", $file or die "$file: $!" ;
|
||||
|
||||
my $csv = Text::CSV_XS->new( {
|
||||
sep_char => ',',
|
||||
binary => 1,
|
||||
keep_meta_info => 1,
|
||||
eol => $/,
|
||||
} ) ;
|
||||
|
||||
my $line_1 = parse_one_line_io( $csv, $io ) ;
|
||||
die if ( not defined $line_1 ) ; # first line must have no problem
|
||||
|
||||
my @columns_def_orig = @$line_1 ;
|
||||
my @columns_def = map { remove_first_blank( $_ ) } @columns_def_orig ;
|
||||
$debug_csv and print "columns_def = ", map( { "[$_]" } @columns_def ), "\n";
|
||||
|
||||
my %columns_def = hash_and_count_dupplicate( @columns_def ) ;
|
||||
my $nb_columns_def = scalar @columns_def ;
|
||||
|
||||
my $line_counter = 2 ;
|
||||
my @actions ;
|
||||
while ( 1 ) {
|
||||
$debug_csv and print "ligne $line_counter ", $csv->eof( ), "\n" ;
|
||||
my $line = parse_one_line_io( $csv, $io ) ;
|
||||
last if ( $csv->eof( ) ) ;
|
||||
if ( not defined $line ) {
|
||||
print "Erreur ligne $line_counter : ", $csv->error_diag, "\n\n";
|
||||
++$line_counter ;
|
||||
next ;
|
||||
}
|
||||
my @columns = @$line ;
|
||||
|
||||
if ( $nb_columns_def != scalar @columns ) {
|
||||
print "Erreur ligne $line_counter : nombre de colonnes = ", scalar @columns, " != $nb_columns_def\n" ;
|
||||
++$line_counter ;
|
||||
next ;
|
||||
}
|
||||
my %columns ;
|
||||
@columns{ @columns_def } = @columns ;
|
||||
$columns{ 'file_csv' } = $file ;
|
||||
$columns{ 'line_number' } = $line_counter ;
|
||||
$csv->combine( @columns ) ;
|
||||
my $line_csv = $csv->string();
|
||||
$columns{ 'line_csv' } = $line_csv ;
|
||||
$debug_csv and print map( { "[$_] = [" . $columns{$_} . "]\n" }
|
||||
@columns_def, 'line_number', 'line_csv', 'file_csv' ),
|
||||
"\n";
|
||||
++$line_counter ;
|
||||
push( @actions, \%columns ) ;
|
||||
}
|
||||
close( $io );
|
||||
return( reverse @actions ) ;
|
||||
}
|
||||
|
||||
sub compute_line {
|
||||
my( $action, $invoice, $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat,
|
||||
$Devise, $Montant, $Numero_davis_de_reception, $Solde,
|
||||
$Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe_paypal ) = @_ ;
|
||||
|
||||
$debug and print( "[$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n",
|
||||
"[$Pays] [$Nom_Option_1] [$Valeur_Option_1]\n" ) ;
|
||||
#$debug_dev and print "$Hors_taxe_paypal\n" ;
|
||||
|
||||
$Montant =~ s/[^0-9-,.]//g ;
|
||||
$Montant =~ s/,/./g ;
|
||||
#$debug and print "MM[$Montant]\n" ;
|
||||
$Hors_taxe_paypal =~ s/,/./g ;
|
||||
|
||||
my $MontantEUR;
|
||||
if ( $bnc ) {
|
||||
$MontantEUR = $Montant ;
|
||||
$MontantEUR = sprintf( "%.4f", $Montant/$usdeur ) if ($Devise eq 'USD') ;
|
||||
print( "\n", "=" x 60, "\n" ) ;
|
||||
print( "[$Date] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [EUR $MontantEUR]\n",
|
||||
"[$Pays] [$Nom_Option_1] [$Valeur_Option_1]\n" ) ;
|
||||
}
|
||||
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'USD' eq $Devise
|
||||
and 'Terminé' eq $Etat
|
||||
) {
|
||||
$Montant =~tr/,/./;
|
||||
#print "$Montant\n" ;
|
||||
my $Montant2_usd;
|
||||
$Montant2_usd = $Hors_taxe_paypal ;
|
||||
$total_usd_received += $Montant ;
|
||||
$total_usd_invoice += $Montant2_usd ;
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'USD' eq $Devise
|
||||
and 'Compensé' eq $Etat
|
||||
) {
|
||||
$Montant =~tr/,/./;
|
||||
#print "$Montant\n" ;
|
||||
my $Montant2_usd;
|
||||
$Montant2_usd = $Hors_taxe_paypal ;
|
||||
$total_usd_received += $Montant ;
|
||||
$total_usd_invoice += $Montant2_usd ;
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Terminé' eq $Etat
|
||||
) {
|
||||
$Montant =~tr/,/./;
|
||||
#print "$Montant\n" ;
|
||||
my $Montant2_eur;
|
||||
$Montant2_eur = $Hors_taxe_paypal ;
|
||||
$total_eur_received += $Montant ;
|
||||
$total_eur_invoice += $Montant2_eur ;
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Remboursé' eq $Etat
|
||||
) {
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$nb_invoice_refund++;
|
||||
$invoice_refund{ $invoice }++ ;
|
||||
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Compensé' eq $Etat
|
||||
) {
|
||||
$Montant =~tr/,/./;
|
||||
#print "$Montant\n" ;
|
||||
my $Montant2_eur;
|
||||
$Montant2_eur = 21.99 if ( 20.88 == $Montant or 20.99 == $Montant ) ;
|
||||
$Montant2_eur = 30 if ( 28.58 == $Montant or 28.73 == $Montant ) ;
|
||||
$Montant2_eur = 110 if ( 105.46 == $Montant ) ;
|
||||
#print "$Montant $Montant2_eur\n" ;
|
||||
$total_eur_received += $Montant ;
|
||||
$total_eur_invoice += $Montant2_eur ;
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
if (
|
||||
'Paiement sur site marchand reçu' eq $Type
|
||||
and 'EUR' eq $Devise
|
||||
and 'Non compensé' eq $Etat
|
||||
) {
|
||||
$invoice = $first_invoice + $nb_invoice ;
|
||||
$nb_invoice++ ;
|
||||
$print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde]\n" ) ;
|
||||
}
|
||||
|
||||
$action->{ 'invoice' } = $invoice ;
|
||||
if ( $bnc ) {
|
||||
my $FR_flag = '' ;
|
||||
$FR_flag = ' FR' if $Pays eq 'France' ;
|
||||
my $IND_flag = '' ;
|
||||
$IND_flag = ' IND' if ('imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 ) ;
|
||||
print "FE $invoice$FR_flag$IND_flag\n" ;
|
||||
print "Facture $invoice imapsync$FR_flag $Nom\n" ;
|
||||
printf( "%.2f [EUR %.2f]\n", $Montant, $MontantEUR ) ;
|
||||
}
|
||||
}
|
||||
|
||||
sub build_invoice {
|
||||
my $invoice = shift ;
|
||||
|
||||
return if ! $invoice ;
|
||||
|
||||
my $action = $action_of_invoice{ $invoice } ;
|
||||
my $refund = '' ;
|
||||
$refund = 'REFUND ' if $invoice_refund{ $invoice } ;
|
||||
my %action = %$action if $action ;
|
||||
#print Data::Dumper->Dump( [$action] ) ;
|
||||
|
||||
my( $Date, $Heure, $Nom, $Type, $Etat, $Devise, $Hors_taxe, $Commission, $Net,
|
||||
$De_l_adresse_email, $A_l_adresse_email, $N_de_transaction, $Titre_de_l_objet,
|
||||
$TVA, $Nom_Option_1, $Valeur_Option_1, $N_de_transaction_de_reference,
|
||||
$Adresse_1, $Adresse_2_district_quartier, $Ville,
|
||||
$Etat_Province, $Code_postal, $Pays, $line_number, $line_csv, $file_csv )
|
||||
= @action{ ( 'Date', 'Heure', 'Nom', 'Type', 'Etat', 'Devise', 'Hors taxe', 'Commission', 'Net',
|
||||
"De l'adresse email", "A l'adresse email", 'N° de transaction', "Titre de l'objet",
|
||||
'TVA', 'Nom Option 1', 'Valeur Option 1', 'Nº de transaction de référence',
|
||||
'Adresse 1', 'Adresse 2/district/quartier', 'Ville',
|
||||
'Etat/Province/Région/Comté/Territoire/Préfecture/République', 'Code postal', 'Pays', 'line_number', 'line_csv', 'file_csv' ) } ;
|
||||
|
||||
#print "$Hors_taxe $Devise\n" ;
|
||||
my $Hors_taxe_num = $Hors_taxe ;
|
||||
$Hors_taxe_num =~ s{,}{.} ;
|
||||
if ($Hors_taxe_num > 100) {
|
||||
print "invoice $invoice $Hors_taxe_num > 100\n" ;
|
||||
#return() ;
|
||||
}
|
||||
|
||||
my ( $email_message_header, $email_message_body )
|
||||
= build_email_message( $Date, $Nom, $De_l_adresse_email, $invoice ) ;
|
||||
if ( $write_invoices ) {
|
||||
write_email_message( $dir_invoices, $invoice,
|
||||
$email_message_header, $email_message_body,
|
||||
$De_l_adresse_email) ;
|
||||
write_csv_info( $dir_invoices, $invoice, $file_csv, $line_number, $line_csv ) ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#print "==== $invoice $refund=================================================" ;
|
||||
#print $email_message ;
|
||||
|
||||
my(
|
||||
$clientAdrA,
|
||||
$clientAdrB,
|
||||
$clientAdrC,
|
||||
$clientAdrD,
|
||||
$clientAdrE,
|
||||
$clientAdrF,
|
||||
)
|
||||
= build_adress(
|
||||
$Nom,
|
||||
$Adresse_1,
|
||||
$Adresse_2_district_quartier,
|
||||
$Ville,
|
||||
$Code_postal,
|
||||
$Etat_Province,
|
||||
$Pays,
|
||||
) ;
|
||||
|
||||
foreach my $str (
|
||||
$De_l_adresse_email,
|
||||
$Nom,
|
||||
$clientAdrA,
|
||||
$clientAdrB,
|
||||
$clientAdrC,
|
||||
$clientAdrD,
|
||||
$clientAdrE,
|
||||
$clientAdrF,
|
||||
) {
|
||||
$str =~ s{#}{\\#}g ;
|
||||
$str =~ s{_}{\\_}g ;
|
||||
$str =~ s{&}{\\&}g ;
|
||||
}
|
||||
|
||||
my ( $clientTypeEN, $clientTypeFR ) = client_type( $Nom_Option_1, $Valeur_Option_1 ) ;
|
||||
|
||||
my (
|
||||
$priceHT,
|
||||
$tvaFR,
|
||||
$tvaEN,
|
||||
$priceTVA,
|
||||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$priceTTCusd
|
||||
)
|
||||
= tva_stuff( $clientTypeEN, $Pays, $Hors_taxe, $Devise ) ;
|
||||
|
||||
my ( $urlSrc, $urlExe ) = download_urls( $Date ) ;
|
||||
my $tex_variables = qq{
|
||||
%% Begin input from $0
|
||||
\\providecommand{\\invoiceNumber}{$invoice}
|
||||
\\providecommand{\\clientName}{$Nom}
|
||||
\\providecommand{\\clientEmail}{$De_l_adresse_email}
|
||||
\\providecommand{\\clientTypeEN}{$clientTypeEN}
|
||||
\\providecommand{\\clientTypeFR}{$clientTypeFR}
|
||||
\\providecommand{\\clientAdrA}{$clientAdrA}
|
||||
\\providecommand{\\clientAdrB}{$clientAdrB}
|
||||
\\providecommand{\\clientAdrC}{$clientAdrC}
|
||||
\\providecommand{\\clientAdrD}{$clientAdrD}
|
||||
\\providecommand{\\clientAdrE}{$clientAdrE}
|
||||
\\providecommand{\\clientAdrF}{$clientAdrF}
|
||||
\\providecommand{\\invoiceDate}{$Date}
|
||||
\\providecommand{\\invoiceHour}{$Heure}
|
||||
\\providecommand{\\priceHT}{$priceHT}
|
||||
\\providecommand{\\tvaFR}{$tvaFR}
|
||||
\\providecommand{\\tvaEN}{$tvaEN}
|
||||
\\providecommand{\\priceTVA}{$priceTVA}
|
||||
\\providecommand{\\priceTTC}{$priceTTC}
|
||||
\\providecommand{\\priceTTCusd}{$priceTTCusd}
|
||||
\\providecommand{\\messageTVAFR}{$messageTVAFR}
|
||||
\\providecommand{\\messageTVAEN}{$messageTVAEN}
|
||||
\\providecommand{\\urlSrc}{\\url{$urlSrc}}
|
||||
\\providecommand{\\urlExe}{\\url{$urlExe}}
|
||||
%% End input from $0
|
||||
} ;
|
||||
|
||||
|
||||
#print $tex_variables ;
|
||||
|
||||
write_tex_variables_file( $dir_invoices,
|
||||
$invoice, $Date, $tex_variables ) if $write_invoices ;
|
||||
|
||||
}
|
||||
|
||||
sub build_email_message {
|
||||
|
||||
my ( $date, $name, $email, $invoice ) = @_ ;
|
||||
|
||||
my $message_header = qq{X-imapsync: invoice $invoice
|
||||
From: Gilles LAMIRAL <gilles.lamiral\@laposte.net>
|
||||
Bcc: gilles\@lamiral.info
|
||||
Subject: [imapsync invoice] $invoice ($date)
|
||||
Disposition-Notification-To: Gilles LAMIRAL <gilles.lamiral\@laposte.net>
|
||||
} ;
|
||||
|
||||
|
||||
my $message_body = qq{
|
||||
Hello $name,
|
||||
|
||||
First I'm sorry for the delay to prepare and send you this message.
|
||||
|
||||
Attached is the invoice of imapsync software you bought ($date).
|
||||
The invoice file is named facture_imapsync-${invoice}.pdf
|
||||
This invoice is in PDF format, ready to be print.
|
||||
|
||||
If you need this invoice on paper, just ask me then
|
||||
I will send it to you by postal mail.
|
||||
|
||||
In order to respect the law, this numeric invoice PDF
|
||||
file is signed with my private gpg key.
|
||||
|
||||
The resulting gpg signature is in the file named
|
||||
facture_imapsync-${invoice}.pdf.asc
|
||||
also attached in this email message.
|
||||
|
||||
You can verify I (Gilles LAMIRAL) really generated
|
||||
this invoice with the following command line
|
||||
|
||||
gpg --verify facture_imapsync-${invoice}.pdf.asc facture_imapsync-${invoice}.pdf
|
||||
|
||||
or any other gpg graphical tool.
|
||||
|
||||
I thank you again for buying and using imapsync.
|
||||
|
||||
Any feedback is welcome.
|
||||
|
||||
--
|
||||
Au revoir, 09 51 84 42 42
|
||||
Gilles Lamiral. France, Baulon (35580) 06 20 79 76 06
|
||||
} ;
|
||||
|
||||
my $message_body_blabla = qq{
|
||||
Here is the fingerprint of my public key
|
||||
pub 1024D/FDA2B3DC 2002-05-08
|
||||
Key fingerprint = 7906 F53D 0D62 0C67 304A 4CF0 6928 869B FDA2 B3DC
|
||||
uid Gilles LAMIRAL <gilles.lamiral\@laposte.net>
|
||||
sub 1024g/A2C4CB42 2002-05-08
|
||||
|
||||
Of course the verification doesn't prove anything until
|
||||
all the following conditions are met:
|
||||
- you met me,
|
||||
- I agree that the fingerprint above is really mine
|
||||
- I prove I'm Gilles LAMIRAL with an official paper.
|
||||
|
||||
Normally we won't have to verify anything unless
|
||||
I disagree with this invoice and the payment
|
||||
you made for imapsync.
|
||||
} ;
|
||||
|
||||
return( $message_header, $message_body ) ;
|
||||
|
||||
}
|
||||
|
||||
sub write_csv_info {
|
||||
|
||||
my( $dir_invoices, $invoice, $file_csv, $line_number, $line_csv ) = @_ ;
|
||||
|
||||
open( CSVINFO, "> $dir_invoices/$invoice/csv_info.txt") or die ;
|
||||
print CSVINFO join( "\n", $file_csv, $line_number, $line_csv ) ;
|
||||
close( CSVINFO ) ;
|
||||
|
||||
}
|
||||
|
||||
sub write_email_message {
|
||||
my ( $dir_invoices, $invoice, $message_header, $message_body, $email_address ) = @_ ;
|
||||
|
||||
my $message_body_utf8 = to_utf8({ -string => $message_body, -charset => 'ISO-8859-1' });
|
||||
|
||||
mkdir( "$dir_invoices/$invoice" ) or die if ! -d "$dir_invoices/$invoice" ;
|
||||
|
||||
open( HEADER, "> $dir_invoices/$invoice/facture_message_header.txt") or die ;
|
||||
print HEADER $message_header ;
|
||||
close( HEADER ) ;
|
||||
|
||||
open( BODY, "> $dir_invoices/$invoice/facture_message_body.txt") or die ;
|
||||
print BODY $message_body_utf8 ;
|
||||
close( BODY ) ;
|
||||
|
||||
open( ADDRESS, "> $dir_invoices/$invoice/email_address.txt") or die ;
|
||||
print ADDRESS "$email_address\n" ;
|
||||
close( ADDRESS ) ;
|
||||
}
|
||||
|
||||
|
||||
sub write_tex_variables_file {
|
||||
my ( $dir_invoices, $invoice, $date_jjSmmSaaaa, $tex_variables ) = @_ ;
|
||||
|
||||
my $tex_variables_utf8 = to_utf8({ -string => $tex_variables, -charset => 'ISO-8859-1' });
|
||||
mkdir( "$dir_invoices/$invoice" ) or die if ! -d "$dir_invoices/$invoice" ;
|
||||
open( FILE, "> $dir_invoices/$invoice/imapsync_var.tex") or die ;
|
||||
print FILE $tex_variables_utf8 ;
|
||||
close( FILE ) ;
|
||||
|
||||
}
|
||||
|
||||
sub download_urls {
|
||||
my $date_jjSmmSaaaa = shift ;
|
||||
|
||||
my $date_aaaa_mm_jj = date_aaaa_mm_jj( $date_jjSmmSaaaa ) ;
|
||||
# print "$date_aaaa_mm_jj $date_jjSmmSaaaa\n" ;
|
||||
my ( $urlSrc, $urlExe ) ;
|
||||
|
||||
if ('2011_03_24' le $date_aaaa_mm_jj) {
|
||||
$urlSrc = 'http://www.linux-france.org/prj/imapsync/paypal_return.shtml' ;
|
||||
$urlExe = '' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
if ('2011_02_21' le $date_aaaa_mm_jj) {
|
||||
$urlSrc = 'http://www.linux-france.org/depot/2011_02_21/OUMbo7/' ;
|
||||
$urlExe = 'http://www.linux-france.org/depot/2011_02_21/rHSVNs/' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
if ('2011_01_18' le $date_aaaa_mm_jj) {
|
||||
$urlSrc = 'http://www.linux-france.org/depot/2011_01_18/zPRRNt/' ;
|
||||
$urlExe = 'http://www.linux-france.org/depot/2011_01_18/FO1QzG/' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
if ('2011_01_18' le $date_aaaa_mm_jj) {
|
||||
$urlSrc = 'http://www.linux-france.org/depot/2010_11_28/SiNdlZ/' ;
|
||||
$urlExe = 'http://www.linux-france.org/depot/2010_11_28/R3ZAyr/' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
$urlSrc = 'http://www.linux-france.org/depot/2010_11_08/X2PWMe/' ;
|
||||
$urlExe = 'http://www.linux-france.org/depot/2010_11_08/ZZ7zSc/' ;
|
||||
return( $urlSrc, $urlExe ) ;
|
||||
}
|
||||
|
||||
sub date_aaaa_mm_jj {
|
||||
my $date_jjSmmSaaaa = shift ;
|
||||
|
||||
if ( $date_jjSmmSaaaa =~ m{(\d\d)/(\d\d)/(\d\d\d\d)} ) {
|
||||
my( $jj, $mm, $aaaa ) = ( $1, $2, $3 ) ;
|
||||
return( join( '_', $aaaa, $mm, $jj ) ) ;
|
||||
}else{
|
||||
return( '9999_12_31' ) ;
|
||||
}
|
||||
}
|
||||
|
||||
sub tva_stuff {
|
||||
my( $clientTypeEN, $Pays, $Hors_taxe, $Devise ) = @_ ;
|
||||
|
||||
my $priceTTCusd = '' ;
|
||||
$Hors_taxe =~ s{,}{.} ;
|
||||
|
||||
if ( $Devise eq 'USD' ) {
|
||||
$priceTTCusd = "(USD $Hors_taxe)" ;
|
||||
$Hors_taxe = ( $Hors_taxe/$usdeur ) ;
|
||||
}
|
||||
|
||||
my (
|
||||
$priceHT,
|
||||
$tvaFR,
|
||||
$tvaEN,
|
||||
$priceTVA,
|
||||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
) ;
|
||||
|
||||
if ( ( 'individual' eq $clientTypeEN)
|
||||
or
|
||||
( 'France' eq $Pays )
|
||||
) {
|
||||
$priceHT = sprintf('%2.2f', $Hors_taxe/1.196) ;
|
||||
$tvaFR = '19,60\%';
|
||||
$tvaEN = '';
|
||||
$priceTVA = sprintf('%2.2f', $Hors_taxe/1.196*0.196) ;
|
||||
$priceTTC = sprintf('%2.2f', $Hors_taxe) ;
|
||||
$messageTVAFR = '';
|
||||
$messageTVAEN = '';
|
||||
}else{
|
||||
$priceHT = sprintf('%2.2f', $Hors_taxe) ;
|
||||
$tvaFR = 'néant';
|
||||
$tvaEN = '(none)';
|
||||
$priceTVA = 0 ;
|
||||
$priceTTC = $priceHT;
|
||||
$messageTVAFR = 'Exonération de TVA, article 259 B-1 du Code Général des Impôts';
|
||||
$messageTVAEN = '(VAT tax-exempt, article 259 B-1 French General Tax Code)';
|
||||
}
|
||||
foreach my $price ( $priceHT, $priceTVA, $priceTTC, $priceTTCusd ) {
|
||||
#print "[$price]\n" ;
|
||||
$price =~ s{\.}{, } ;
|
||||
}
|
||||
return(
|
||||
$priceHT,
|
||||
$tvaFR,
|
||||
$tvaEN,
|
||||
$priceTVA,
|
||||
$priceTTC,
|
||||
$messageTVAFR,
|
||||
$messageTVAEN,
|
||||
$priceTTCusd
|
||||
) ;
|
||||
}
|
||||
|
||||
sub client_type {
|
||||
my ( $Nom_Option_1, $Valeur_Option_1 ) = @_ ;
|
||||
|
||||
my ( $clientTypeEN, $clientTypeFR ) = ( 'professional', 'professionnel' ) ;
|
||||
|
||||
if ('imapsync usage' eq $Nom_Option_1 and 'individual' eq $Valeur_Option_1 ) {
|
||||
$clientTypeEN = 'individual' ;
|
||||
$clientTypeFR = 'individuel' ;
|
||||
}elsif ('imapsync usage' eq $Nom_Option_1 and 'professional' eq $Valeur_Option_1 ) {
|
||||
$clientTypeEN = 'professional' ;
|
||||
$clientTypeFR = 'professionnel' ;
|
||||
}
|
||||
|
||||
return( $clientTypeEN, $clientTypeFR ) ;
|
||||
}
|
||||
|
||||
sub build_adress {
|
||||
my(
|
||||
$Nom,
|
||||
$Adresse_1,
|
||||
$Adresse_2_district_quartier,
|
||||
$Ville,
|
||||
$Code_postal,
|
||||
$Etat_Province,
|
||||
$Pays,
|
||||
) = @_ ;
|
||||
|
||||
my $addr = "
|
||||
===========================================================
|
||||
Nom $Nom
|
||||
Adresse_1 $Adresse_1
|
||||
Adresse_2_district_quartier $Adresse_2_district_quartier
|
||||
Ville Code_postal $Ville $Code_postal
|
||||
Etat_Province $Etat_Province
|
||||
Pays $Pays
|
||||
" ;
|
||||
#print $addr ;
|
||||
|
||||
my @address ;
|
||||
$Nom = '' if ( $Nom =~ m/^\s+$/ ) ;
|
||||
push( @address, $Nom ) if $Nom ;
|
||||
push( @address, $Adresse_1 ) if $Adresse_1 ;
|
||||
push( @address, $Adresse_2_district_quartier ) if $Adresse_2_district_quartier ;
|
||||
push( @address, "$Ville $Code_postal" ) if ( $Ville or $Code_postal );
|
||||
push( @address, $Etat_Province ) if $Etat_Province ;
|
||||
push( @address, $Pays, ) if $Pays ;
|
||||
|
||||
|
||||
my $clientAdrA = shift( @address ) || '' ;
|
||||
my $clientAdrB = shift( @address ) || '' ;
|
||||
my $clientAdrC = shift( @address ) || '' ;
|
||||
my $clientAdrD = shift( @address ) || '' ;
|
||||
my $clientAdrE = shift( @address ) || '' ;
|
||||
my $clientAdrF = shift( @address ) || '' ;
|
||||
|
||||
$addr = "
|
||||
[$clientAdrA]
|
||||
[$clientAdrB]
|
||||
[$clientAdrC]
|
||||
[$clientAdrD]
|
||||
[$clientAdrE]
|
||||
[$clientAdrF]
|
||||
";
|
||||
#print $addr ;
|
||||
|
||||
return(
|
||||
$clientAdrA,
|
||||
$clientAdrB,
|
||||
$clientAdrC,
|
||||
$clientAdrD,
|
||||
$clientAdrE,
|
||||
$clientAdrF,
|
||||
) ;
|
||||
}
|
83
paypal_reply/paypal_build_invoices
Normal file
83
paypal_reply/paypal_build_invoices
Normal file
|
@ -0,0 +1,83 @@
|
|||
#!/bin/sh
|
||||
|
||||
# usage: sh paypal_build_invoices/g/var/paypal_invoices/???
|
||||
|
||||
cp /home/gilles/public_html/AGIL/factures/000/facture_imapsync-000.tex /g/var/paypal_invoices/
|
||||
|
||||
set -x
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan --write_invoices --first_in 147 /g/paypal/paypal_2010_11_complet.csv
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan --write_invoices --first_in 214 /g/paypal/paypal_2010_12_complet.csv
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan --write_invoices --first_in 294 /g/paypal/paypal_2011_01_complet.csv
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan --write_invoices --first_in 382 /g/paypal/paypal_2011_02_complet.csv
|
||||
/g/public_html/imapsync/paypal_reply/paypal_bilan --write_invoices --first_in 473 /g/paypal/paypal_2011_03_complet.csv
|
||||
set +x
|
||||
|
||||
# USD de 147 à 340
|
||||
# EUR de 341 à ...
|
||||
|
||||
# 20110413 Found problems with 189 199 249 258 263 359 537
|
||||
# 20110412 Found problems with 189 199 242 249 258 263 359 382 537
|
||||
# cen cen JAP cen cen cen cen TCH JAP
|
||||
# cen
|
||||
# 155 TVA 1,89
|
||||
# 171 TVA 4,42
|
||||
# 220 TVA 3,16
|
||||
# 225 TVA 3,16
|
||||
# 236 TVA 4,42
|
||||
# 298 TVA 3,16
|
||||
# 307 TVA 4,42
|
||||
# 312 TVA 4,42
|
||||
# 324 TVA 4,42
|
||||
# 351 TVA 4,92
|
||||
# 395 TVA 4,92
|
||||
# 408 TVA 4,92
|
||||
# 419 TVA 4,92
|
||||
# 432 TVA 4,92
|
||||
# 435 TVA 4,92
|
||||
# 452 TVA 4,92
|
||||
# 460 TVA 4,92
|
||||
# 461 TVA 4,92
|
||||
# 463 TVA 4,92
|
||||
# 464 TVA 4,92
|
||||
# 475 TVA 4,92
|
||||
# 487 TVA 4,92
|
||||
# 489 TVA 4,92
|
||||
# 502 TVA 4,92
|
||||
# 504 TVA 4,92
|
||||
# 511 TVA 4,92
|
||||
# 522 TVA 4,92
|
||||
# 523 TVA 4,92
|
||||
# 533 TVA 4,92
|
||||
# 537 TVA 4,92
|
||||
# 540 TVA 4,92
|
||||
# 543 TVA 4,92
|
||||
# 549 TVA 4,92
|
||||
# 551 TVA 4,92
|
||||
# 552 TVA 4,92
|
||||
# 556 TVA 4,92
|
||||
# 563 TVA 4,92
|
||||
|
||||
for d in "$@"; do
|
||||
echo "==== $d ===="
|
||||
cd $d
|
||||
bd=`basename $d`
|
||||
ln -f ../facture_imapsync-000.tex facture_imapsync-$bd.tex;
|
||||
if ! pdflatex facture_imapsync-$bd.tex < /dev/null > /dev/null; then
|
||||
echo "PB $bd"
|
||||
if test -f facture_imapsync-${bd}_good.tex \
|
||||
&& pdflatex facture_imapsync-${bd}_good.tex < /dev/null > /dev/null
|
||||
then
|
||||
ln -f facture_imapsync-${bd}_good.pdf facture_imapsync-$bd.pdf
|
||||
echo "PB $bd solved with manual facture_imapsync-${bd}_good.tex"
|
||||
PB_LIST_MANUAL="$PB_LIST_MANUAL $bd"
|
||||
else
|
||||
PB_LIST="$PB_LIST $bd"
|
||||
rm -f facture_imapsync-$bd.pdf
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
gpg --use-agent --armor --detach-sign --yes facture_imapsync-$bd.pdf
|
||||
done
|
||||
|
||||
echo "Found problems with $PB_LIST"
|
||||
echo "Manual invoices for $PB_LIST_MANUAL"
|
|
@ -1,9 +1,10 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# $Id: paypal_build_reply,v 1.10 2011/02/02 22:31:41 gilles Exp gilles $
|
||||
# $Id: paypal_build_reply,v 1.12 2011/03/23 18:31:52 gilles Exp gilles $
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
my ($msg_id_file, $msg_id);
|
||||
my ($amount, $name, $email);
|
||||
|
@ -13,23 +14,39 @@ my (
|
|||
$url_source, $url_exe, $url, $release,
|
||||
);
|
||||
|
||||
my $help ;
|
||||
my $debug ;
|
||||
|
||||
my $numopt = scalar(@ARGV);
|
||||
my $opt_ret = GetOptions(
|
||||
"help" => \$help,
|
||||
"debug!" => \$debug,
|
||||
);
|
||||
|
||||
usage() and exit if ($help or ! $numopt) ;
|
||||
|
||||
$msg_id_file = $ARGV[1];
|
||||
$msg_id = firstline($msg_id_file);
|
||||
|
||||
$debug and print "Hi!\n" ;
|
||||
|
||||
while(<>) {
|
||||
next if ( ! /^(.*Num.+ro de transaction :.*)$/ );
|
||||
next if ( ! /^(.*Num.+ro de transaction.*)$/ );
|
||||
$paypal_line = $1;
|
||||
$paypal_info = "===== Paypal id =====\n$paypal_line\n";
|
||||
$debug and print "$paypal_info" ;
|
||||
last;
|
||||
}
|
||||
|
||||
while(<>) {
|
||||
next if ( ! /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*) \((.*)\)/);
|
||||
($amount, $name, $email) = ($1, $2, $3);
|
||||
last;
|
||||
if ( /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*) \((.*)\)/) {
|
||||
($amount, $name, $email) = ($1, $2, $3);
|
||||
last;
|
||||
}
|
||||
if ( /^Vous avez re.*paiement d'un montant de (.*) de la part de (.*)/) {
|
||||
($amount, $name, $email) = ($1, "", $2);
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
$url_source = firstline('/g/var/paypal_reply/url_source');
|
||||
$url_exe = firstline('/g/var/paypal_reply/url_exe');
|
||||
$release = firstline('/g/var/paypal_reply/url_release');
|
||||
|
@ -37,18 +54,25 @@ $release = firstline('/g/var/paypal_reply/url_release');
|
|||
#print "[$amount] [$name] [$email] [$paypal_line]\n";
|
||||
|
||||
|
||||
|
||||
while(<>) {
|
||||
next if ( ! /^Acheteur/ );
|
||||
$buyer .= "===== Acheteur =====\n";
|
||||
last;
|
||||
if ( /^Acheteur/ ) {
|
||||
$buyer .= "===== Acheteur =====\n";
|
||||
last;
|
||||
}
|
||||
if ( /^Informations sur l'acheteur/ ) {
|
||||
$buyer .= "===== Acheteur =====\n";
|
||||
chomp( $name = <> );
|
||||
$buyer .= "$name\n" ;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
while(<>) {
|
||||
$buyer .= $_ if ( ! /^Instructions/ );
|
||||
last if ( /^Instructions/ );
|
||||
$buyer .= $_ if ( ! /^-----------------------------------/ );
|
||||
last if ( /^-----------------------------------/ );
|
||||
}
|
||||
|
||||
|
||||
while(<>) {
|
||||
next if ( ! /^Description :(.*)/ );
|
||||
$description = "===== Details =====\n";
|
||||
|
@ -57,13 +81,16 @@ while(<>) {
|
|||
}
|
||||
|
||||
while(<>) {
|
||||
$debug and print "LINE:$_" ;
|
||||
$description .= $_;
|
||||
last if ( /^Paiement envoy/ );
|
||||
last if ( /^N.*d'avis de r.*ception/ );
|
||||
}
|
||||
|
||||
|
||||
my $address = 'gilles.lamiral@laposte.net';
|
||||
my $address2 = 'gilles@lamiral.info';
|
||||
my $rcstag = '$Id: paypal_build_reply,v 1.10 2011/02/02 22:31:41 gilles Exp gilles $';
|
||||
my $rcstag = '$Id: paypal_build_reply,v 1.12 2011/03/23 18:31:52 gilles Exp gilles $';
|
||||
|
||||
my $message = <<EOM
|
||||
X-Comment: $rcstag
|
||||
|
@ -81,6 +108,8 @@ $url_source
|
|||
You will find the latest imapsync.exe binary release $release at the following link:
|
||||
$url_exe
|
||||
|
||||
You will receive an invoice soon.
|
||||
|
||||
Next imapsync releases will be available for one year without extra payment.
|
||||
Just keep this message and ask for the new links.
|
||||
(I will build an automatic subscription tool later)
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: paypal_functions,v 1.12 2011/02/02 22:32:26 gilles Exp gilles $
|
||||
|
||||
|
||||
# $Id: paypal_functions,v 1.15 2011/03/23 19:10:56 gilles Exp gilles $
|
||||
|
||||
paypal_prerequisites() {
|
||||
perl -mMIME::Lite -e '' || echo 'sudo aptitude install libmime-lite-perl'
|
||||
|
@ -35,16 +33,15 @@ paypal_init_petite_INBOX() {
|
|||
}
|
||||
|
||||
|
||||
paypal_init_test() {
|
||||
paypal_init_petite_dev() {
|
||||
user=gilles@est.belle
|
||||
passfile=/g/var/pass/secret.gilles_mbox
|
||||
host=p
|
||||
tmpdir=/g/var/paypal_reply_test
|
||||
folder='INBOX.03_imapsync.imapsync_paypal'
|
||||
tmpdir=/g/var/paypal_reply_dev
|
||||
folder='INBOX.03_imapsync.imapsync_paypal_dev'
|
||||
}
|
||||
|
||||
|
||||
|
||||
get_mail() {
|
||||
# creation des répertoires
|
||||
mkdir -p $tmpdir/msg_in/
|
||||
|
@ -58,6 +55,19 @@ get_mail() {
|
|||
)
|
||||
}
|
||||
|
||||
get_mail_PP1470() {
|
||||
# creation des répertoires
|
||||
mkdir -p $tmpdir/msg_in/
|
||||
mkdir -p $tmpdir/msg_id/
|
||||
(
|
||||
cd $tmpdir/msg_in/
|
||||
# recuperation des messages de la boite sans destruction des messages
|
||||
# transférés
|
||||
paypal_imapget --host $host --user $user --passfile $passfile \
|
||||
--folder $folder --search TEXT --search PP1470
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
extract_mail() {
|
||||
mkdir -p $tmpdir/msg_out/
|
||||
|
@ -123,9 +133,8 @@ build_reply_arg() {
|
|||
bd=`basename "$d"`
|
||||
file_id=`troncate_last_2_chars $bd`
|
||||
d_reply="$tmpdir/msg_reply/$file_id"
|
||||
test -f "$d_reply/$file_id.txt" && continue
|
||||
mkdir -p "$d_reply"
|
||||
echo building "$d_reply/$file_id.txt"
|
||||
echo paypal_build_reply "$f" "$tmpdir/msg_id/$file_id"
|
||||
paypal_build_reply "$f" "$tmpdir/msg_id/$file_id"
|
||||
done
|
||||
}
|
||||
|
@ -151,8 +160,8 @@ paypal_all() {
|
|||
paypal_prerequisites
|
||||
echo "Will get messages in $tmpdir/msg_in/"
|
||||
get_mail
|
||||
get_mail_PP1470
|
||||
echo "Done get messages in $tmpdir/msg_in/"
|
||||
|
||||
echo "Will extract_mail in $tmpdir/msg_out/"
|
||||
extract_mail
|
||||
echo "Done extract_mail in $tmpdir/msg_out/"
|
||||
|
@ -188,4 +197,31 @@ paypal_reply_laposte() {
|
|||
echo "Done paypal_reply_laposte"
|
||||
}
|
||||
|
||||
paypal_all_dev() {
|
||||
paypal_prerequisites
|
||||
echo "Will get messages in $tmpdir/msg_in/"
|
||||
get_mail_PP1470
|
||||
echo "Done get messages in $tmpdir/msg_in/"
|
||||
echo "Will extract_mail in $tmpdir/msg_out/"
|
||||
extract_mail
|
||||
echo "Done extract_mail in $tmpdir/msg_out/"
|
||||
echo "Will converting to utf8 in $tmpdir/msg_out_utf8/"
|
||||
convert_utf8
|
||||
echo "Done converting to utf8 in $tmpdir/msg_out_utf8/"
|
||||
echo "Will build_reply in $tmpdir/msg_reply/"
|
||||
build_reply
|
||||
echo "Done build_reply in $tmpdir/msg_reply/"
|
||||
echo "Will send_reply $@"
|
||||
send_reply "$@"
|
||||
echo "Done send_reply $@"
|
||||
}
|
||||
|
||||
|
||||
paypal_reply_petite_dev() {
|
||||
echo "Doing paypal_reply_petite_dev"
|
||||
echo paypal_init_petite_dev
|
||||
paypal_init_petite_dev
|
||||
paypal_all_dev "$@"
|
||||
echo "Done paypal_reply_petite_dev"
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl -w
|
||||
|
||||
# $Id: paypal_imapget,v 1.6 2010/12/29 23:50:45 gilles Exp gilles $
|
||||
# $Id: paypal_imapget,v 1.7 2011/03/23 17:05:24 gilles Exp gilles $
|
||||
|
||||
use Getopt::Long;
|
||||
use Mail::IMAPClient;
|
||||
|
@ -15,6 +15,7 @@ my $user;
|
|||
my $password;
|
||||
my $passfile;
|
||||
my $folder = 'INBOX';
|
||||
my @search ;
|
||||
my $help;
|
||||
|
||||
my $numopt = scalar(@ARGV);
|
||||
|
@ -24,6 +25,7 @@ my $opt_ret = GetOptions(
|
|||
"password=s" => \$password,
|
||||
"passfile=s" => \$passfile,
|
||||
"folder=s" => \$folder,
|
||||
"search=s" => \@search,
|
||||
"help" => \$help,
|
||||
"delete!" => \$delete,
|
||||
"expunge!" => \$expunge,
|
||||
|
@ -51,7 +53,10 @@ $imap->select($folder) or die "Error select folder [$folder] host [$host] user [
|
|||
|
||||
#my @uids = $imap->search('HEADER', 'SUBJECT',"=?windows-1252?Q?Avis_de_r=E9ception_d=27un_paiement?=");
|
||||
#my @uids = $imap->search('HEADER', 'Sender','sendmail@paypal.com');
|
||||
my @uids = $imap->search('TEXT', 'PP341');
|
||||
#my @uids = $imap->search('TEXT', 'PP341');
|
||||
print "@search\n" ;
|
||||
@search = ('TEXT', 'PP341') if not @search ;
|
||||
my @uids = $imap->search('HEADER', 'Sender','sendmail@paypal.com', @search );
|
||||
print "Search: [@uids]\n";
|
||||
|
||||
foreach $msg (@uids) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: paypal_run_test,v 1.1 2010/11/28 01:00:45 gilles Exp gilles $
|
||||
# $Id: paypal_run_dev,v 1.4 2011/03/23 19:08:30 gilles Exp gilles $
|
||||
|
||||
set -e
|
||||
#set -x
|
||||
|
@ -8,7 +8,7 @@ set -e
|
|||
|
||||
# Add path to commands at home
|
||||
PATH=$PATH:/g/public_html/imapsync/paypal_reply
|
||||
PERL5LIB=/g/public_html/imapsync/Mail-IMAPClient-3.25/lib
|
||||
PERL5LIB=/g/public_html/imapsync/Mail-IMAPClient-3.28/lib
|
||||
export PERL5LIB
|
||||
|
||||
test -f /g/public_html/imapsync/paypal_reply/paypal_functions \
|
||||
|
@ -18,7 +18,7 @@ test -f /g/public_html/imapsync/paypal_reply/paypal_functions \
|
|||
DATE_1=`date`
|
||||
|
||||
echo "==== paypal_reply_test ===="
|
||||
paypal_reply_test
|
||||
paypal_reply_petite_dev "$@"
|
||||
echo
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: paypal_run_laposte,v 1.2 2010/11/28 05:27:12 gilles Exp gilles $
|
||||
# $Id: paypal_run_laposte,v 1.3 2011/03/23 17:02:39 gilles Exp $
|
||||
|
||||
set -e
|
||||
#set -x
|
||||
|
@ -8,7 +8,7 @@ set -e
|
|||
|
||||
# Add path to commands at home
|
||||
PATH=$PATH:/g/public_html/imapsync/paypal_reply
|
||||
PERL5LIB=/g/public_html/imapsync/Mail-IMAPClient-3.25/lib
|
||||
PERL5LIB=/g/public_html/imapsync/Mail-IMAPClient-3.28/lib
|
||||
export PERL5LIB
|
||||
|
||||
test -f /g/public_html/imapsync/paypal_reply/paypal_functions \
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
# $Id: paypal_run_petite,v 1.4 2010/12/14 15:40:13 gilles Exp gilles $
|
||||
# $Id: paypal_run_petite,v 1.5 2011/03/23 17:02:39 gilles Exp $
|
||||
|
||||
set -e
|
||||
#set -x
|
||||
|
@ -8,7 +8,7 @@ set -e
|
|||
|
||||
# Add path to commands at home
|
||||
PATH=$PATH:/g/public_html/imapsync/paypal_reply
|
||||
PERL5LIB=/g/public_html/imapsync/Mail-IMAPClient-3.25/lib
|
||||
PERL5LIB=/g/public_html/imapsync/Mail-IMAPClient-3.28/lib
|
||||
export PERL5LIB
|
||||
|
||||
test -f /g/public_html/imapsync/paypal_reply/paypal_functions \
|
||||
|
|
43
paypal_reply/paypal_send_invoices
Normal file
43
paypal_reply/paypal_send_invoices
Normal file
|
@ -0,0 +1,43 @@
|
|||
#!/bin/sh
|
||||
|
||||
# usages:
|
||||
# sh paypal_send_invoices /g/var/paypal_invoices/147
|
||||
# sh paypal_send_invoices /g/var/paypal_invoices/15?
|
||||
|
||||
|
||||
send_invoice() {
|
||||
test X"" = X"$1" && { echo "usage: send_invoice /g/var/paypal_invoices/147 vince@norestech.net"; return; }
|
||||
d="$1"
|
||||
echo "====== $d ======"
|
||||
#echo
|
||||
cd $d || return
|
||||
bd=`basename $d`
|
||||
#echo "$bd"
|
||||
invoice="$bd"
|
||||
test -f facture_imapsync-${invoice}.pdf || { echo NO facture_imapsync-${invoice}.pdf ; return; }
|
||||
test -f facture_imapsync-${invoice}.pdf.asc || { echo NO facture_imapsync-${invoice}.pdf.asc ; return; }
|
||||
test -f facture_message_header.txt || { echo NO facture_message_header.txt ; return; }
|
||||
test -f facture_message_body.txt || { echo NO facture_message_body.txt ; return; }
|
||||
test -f email_address.txt || { echo NO email_address.txt ; return; }
|
||||
|
||||
email=${2:-`cat email_address.txt`}
|
||||
> facture_message_to.txt
|
||||
egrep '^To: ' facture_message_header.txt > /dev/null || echo "To: $email" > facture_message_to.txt
|
||||
cat facture_message_header.txt facture_message_to.txt facture_message_body.txt > facture_message.txt
|
||||
more facture_message.txt
|
||||
|
||||
echo '====== END of message ======'
|
||||
test -f "SENT_TO_$email" && { echo "Already SENT_TO_$email"; }
|
||||
test -f "SENT_TO_$email" || acroread facture_imapsync-${invoice}.pdf&
|
||||
echo "Send this invoice ${invoice} to $email?"
|
||||
read r < /dev/tty
|
||||
echo SAID "[$r]"
|
||||
test X"$r" = Xy && {
|
||||
echo | mutt -H facture_message.txt -a facture_imapsync-${invoice}.pdf facture_imapsync-${invoice}.pdf.asc --
|
||||
touch SENT_TO_$email
|
||||
}
|
||||
}
|
||||
|
||||
for d in "$@"; do
|
||||
send_invoice "$d"
|
||||
done
|
Loading…
Add table
Add a link
Reference in a new issue