Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 1ae70a98

Von Sven Schöling vor mehr als 17 Jahren hinzugefügt

  • ID 1ae70a98a8bcff7609e7fff67fb24015d462da23
  • Vorgänger cae6316e
  • Nachfolger 3a4e1d5e

bin/mozilla/ar.pl auf use strict standard gebracht.

Debitoren storno umgeschrieben und Bug gefixt.

Unterschiede anzeigen:

SL/AR.pm
38 38
use SL::DBUtils;
39 39
use SL::MoreCommon;
40 40

  
41
our (%myconfig, $form);
42

  
41 43
sub post_transaction {
42 44
  $main::lxdebug->enter_sub();
43 45

  
......
102 104
  }
103 105

  
104 106
  # adjust paidaccounts if there is no date in the last row
105
  $form->{paidaccounts}-- unless $form->{"datepaid_$form->{paidaccounts}"};
106
  $form->{paid} = 0;
107

  
108
  # add payments
109
  for $i (1 .. $form->{paidaccounts}) {
110
    $form->{"paid_$i"} = $form->round_amount($form->parse_amount($myconfig, $form->{"paid_$i"}), 2);
111
    $form->{paid}     += $form->{"paid_$i"};
112
    $form->{datepaid}  = $form->{"datepaid_$i"};
113
  }
107
  # this does not apply to stornos, where the paid field is set manually
108
  unless ($form->{storno}) {
109
    $form->{paidaccounts}-- unless $form->{"datepaid_$form->{paidaccounts}"};
110
    $form->{paid} = 0;
111

  
112
    # add payments
113
    for $i (1 .. $form->{paidaccounts}) {
114
      $form->{"paid_$i"} = $form->round_amount($form->parse_amount($myconfig, $form->{"paid_$i"}), 2);
115
      $form->{paid}     += $form->{"paid_$i"};
116
      $form->{datepaid}  = $form->{"datepaid_$i"};
117
    }
114 118

  
115
  $form->{amount} = $form->{netamount} + $form->{total_tax};
116
  $form->{paid}   = $form->round_amount($form->{paid} * $form->{exchangerate}, 2);
119
    $form->{amount} = $form->{netamount} + $form->{total_tax};
120
  }
121
  $form->{paid}   = $form->round_amount($form->{paid} * ($form->{exchangerate} || 1), 2);
117 122

  
118 123
  ($null, $form->{employee_id}) = split /--/, $form->{employee};
119 124

  
......
605 610
  $form->{tax} = $taxamount;
606 611

  
607 612
  $form->{invtotal} = $totalamount + $totaltax;
613

  
614
  $main::lxdebug->leave_sub();
608 615
}
609 616

  
617
sub storno {
618
  $main::lxdebug->enter_sub();
619

  
620
  my ($self, $form, $myconfig, $id) = @_;
621

  
622
  my ($query, $new_id, $storno_row, $acc_trans_rows);
623
  my $dbh = $form->get_standard_dbh($myconfig);
624

  
625
  $query = qq|SELECT nextval('glid')|;
626
  ($new_id) = selectrow_query($form, $dbh, $query);
627

  
628
  $query = qq|SELECT * FROM ar WHERE id = ?|;
629
  $storno_row = selectfirst_hashref_query($form, $dbh, $query, $id);
630

  
631
  $storno_row->{id}         = $new_id;
632
  $storno_row->{storno_id}  = $id;
633
  $storno_row->{storno}     = 't';
634
  $storno_row->{invnumber}  = 'Storno-' . $storno_row->{invnumber};
635
  $storno_row->{amount}    *= -1;
636
  $storno_row->{netamount} *= -1;
637
  $storno_row->{paid}       = $storno_amount->{amount};
638

  
639
  delete @$storno_row{qw(itime mtime)};
640

  
641
  $query = sprintf 'INSERT INTO ar (%s) VALUES (%s)', join(', ', keys %$storno_row), join(', ', map '?', values %$storno_row);
642
  do_query($form, $dbh, $query, (values %$storno_row));
643

  
644
  $query = qq|UPDATE ar SET paid = amount + paid, storno = 't' WHERE id = ?|;
645
  do_query($form, $dbh, $query, $id);
646

  
647
  # now copy acc_trans entries
648
  $query = qq|SELECT * FROM acc_trans WHERE trans_id = ?|;
649
  for my $row (@{ selectall_hashref_query($form, $dbh, $query, $id) }) {
650
    delete @$row{qw(itime mtime)};
651
    $query = sprintf 'INSERT INTO acc_trans (%s) VALUES (%s)', join(', ', keys %$row), join(', ', map '?', values %$row);
652
    $row->{trans_id}   = $new_id;
653
    $row->{amount}    *= -1;
654
    do_query($form, $dbh, $query, (values %$row));
655
  }
656

  
657
  $dbh->commit;
658

  
659
  $main::lxdebug->leave_sub();
660
}
661

  
662

  
610 663
1;
611 664

  
bin/mozilla/ar.pl
38 38
use SL::PE;
39 39
use SL::ReportGenerator;
40 40

  
41
use strict;
42
use warnings;
43

  
44
# imports
45
our ($cgi, $form, $lxdebug, $locale, %myconfig);
46

  
41 47
require "bin/mozilla/arap.pl";
42 48
require "bin/mozilla/common.pl";
43 49
require "bin/mozilla/drafts.pl";
......
127 133
sub create_links {
128 134
  $lxdebug->enter_sub();
129 135

  
136
  my ($duedate, $taxincluded, @curr);
137

  
130 138
  $form->create_links("AR", \%myconfig, "customer");
131 139
  $duedate = $form->{duedate};
132 140

  
......
192 200
sub form_header {
193 201
  $lxdebug->enter_sub();
194 202

  
203
  my ($title, $readonly, $exchangerate, $rows);
204
  my ($taxincluded, $notes, $department, $customer, $employee, $amount, $project);
205
  my ($jsscript, $button1, $button2, $onload);
206
  my ($selectAR_amount, $selectAR_paid, $korrektur_checked, $ARselected, $tax);
207
  my (@column_index, %column_data);
208

  
209

  
195 210
  $title = $form->{title};
196 211
  $form->{title} = $locale->text("$title Accounts Receivables Transaction");
197 212

  
......
229 244
  $readonly = ($form->{radier}) ? "" : $readonly;
230 245

  
231 246
  # set option selected
232
  foreach $item (qw(customer currency department employee)) {
247
  foreach my $item (qw(customer currency department employee)) {
233 248
    $form->{"select$item"} =~ s/ selected//;
234 249
    $form->{"select$item"} =~
235 250
      s/option>\Q$form->{$item}\E/option selected>$form->{$item}/;
......
295 310
	      </tr>
296 311
| if $form->{selectdepartment};
297 312

  
298
  $n = ($form->{creditremaining} =~ /-/) ? "0" : "1";
313
  my $n = ($form->{creditremaining} =~ /-/) ? "0" : "1";
299 314

  
300
  $customer =
301
    ($form->{selectcustomer})
302
    ? qq|<select name="customer"
303
onchange="document.getElementById('update_button').click();">$form->{
304
selectcustomer}</select>|
315
  $customer = ($form->{selectcustomer}) 
316
    ? qq|<select name="customer" onchange="document.getElementById('update_button').click();">$form->{selectcustomer}</select>| 
305 317
    : qq|<input name=customer value="$form->{customer}" size=35>|;
306 318

  
307 319
  $employee = qq|
......
528 540
  $amount  = $locale->text('Amount');
529 541
  $project = $locale->text('Project');
530 542

  
531
  for $i (1 .. $form->{rowcount}) {
543
  for my $i (1 .. $form->{rowcount}) {
532 544

  
533 545
    # format amounts
534 546
    $form->{"amount_$i"} =
......
671 683
  my $totalpaid = 0;
672 684

  
673 685
  $form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"});
674
  for $i (1 .. $form->{paidaccounts}) {
686
  for my $i (1 .. $form->{paidaccounts}) {
675 687
    print "
676 688
        <tr>
677 689
";
......
775 787
sub form_footer {
776 788
  $lxdebug->enter_sub();
777 789

  
790
  my ($transdate, $closedto);
791

  
778 792
  print qq|
779 793

  
780 794
<input name=gldate type=hidden value="| . Q($form->{gldate}) . qq|">
......
866 880

  
867 881
  my $display = shift;
868 882

  
883
  my ($totaltax, $exchangerate, $totalpaid);
884

  
869 885
  $form->{invtotal} = 0;
870 886

  
871 887
  map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) }
872 888
    qw(exchangerate creditlimit creditremaining);
873 889

  
874
  @flds  = qw(amount AR_amount projectnumber oldprojectnumber project_id);
875
  $count = 0;
876
  @a     = ();
890
  my @flds  = qw(amount AR_amount projectnumber oldprojectnumber project_id);
891
  my $count = 0;
892
  my @a     = ();
877 893

  
878
  for $i (1 .. $form->{rowcount}) {
879
    $form->{"amount_$i"} =
880
      $form->parse_amount(\%myconfig, $form->{"amount_$i"});
894
  for my $i (1 .. $form->{rowcount}) {
895
    $form->{"amount_$i"} = $form->parse_amount(\%myconfig, $form->{"amount_$i"});
881 896
    $form->{"tax_$i"} = $form->parse_amount(\%myconfig, $form->{"tax_$i"});
882 897
    if ($form->{"amount_$i"}) {
883 898
      push @a, {};
884
      $j = $#a;
899
      my $j = $#a;
885 900
      if (!$form->{"korrektur_$i"}) {
886
        ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"});
901
        my ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"});
887 902
        if ($taxkey > 1) {
888 903
          if ($form->{taxincluded}) {
889 904
            $form->{"tax_$i"} = $form->{"amount_$i"} / ($rate + 1) * $rate;
......
915 930
                       )));
916 931

  
917 932
  $form->{invdate} = $form->{transdate};
918
  $save_AR = $form->{AR};
919
  &check_name(customer);
933
  my $save_AR = $form->{AR};
934
  check_name("customer");
920 935
  $form->{AR} = $save_AR;
921 936

  
922 937
  $form->{invtotal} =
923 938
    ($form->{taxincluded}) ? $form->{invtotal} : $form->{invtotal} + $totaltax;
924 939

  
925
  for $i (1 .. $form->{paidaccounts}) {
940
  for my $i (1 .. $form->{paidaccounts}) {
926 941
    if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {
927 942
      map {
928 943
        $form->{"${_}_$i"} =
......
952 967
  $lxdebug->leave_sub();
953 968
}
954 969

  
970
#
971
# ToDO: fix $closedto and $invdate
972
#
955 973
sub post_payment {
956 974
  $lxdebug->enter_sub();
957 975

  
958 976
  $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
959 977

  
960
  for $i (1 .. $form->{paidaccounts}) {
978
  for my $i (1 .. $form->{paidaccounts}) {
979

  
961 980
    if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {
962
      $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
981
      my $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
963 982

  
964 983
      $form->isblank("datepaid_$i", $locale->text('Payment date missing!'));
965 984

  
966
      $form->error($locale->text('Cannot post payment for a closed period!'))
967
        if ($datepaid <= $closedto);
985
#      $form->error($locale->text('Cannot post payment for a closed period!')) if ($datepaid <= $closedto);
968 986

  
969 987
      if ($form->{currency} ne $form->{defaultcurrency}) {
970
        $form->{"exchangerate_$i"} = $form->{exchangerate}
971
          if ($invdate == $datepaid);
972
        $form->isblank("exchangerate_$i",
973
                       $locale->text('Exchangerate for payment missing!'));
988
#        $form->{"exchangerate_$i"} = $form->{exchangerate} if ($invdate == $datepaid);
989
        $form->isblank("exchangerate_$i", $locale->text('Exchangerate for payment missing!'));
974 990
      }
975 991
    }
976 992
  }
977 993

  
978 994
  ($form->{AR})      = split /--/, $form->{AR};
979 995
  ($form->{AR_paid}) = split /--/, $form->{AR_paid};
980
  $form->redirect($locale->text('Payment posted!'))
981
      if (AR->post_payment(\%myconfig, \%$form));
982
    $form->error($locale->text('Cannot post payment!'));
983

  
996
  $form->redirect($locale->text('Payment posted!')) if (AR->post_payment(\%myconfig, \%$form));
997
  $form->error($locale->text('Cannot post payment!'));
984 998

  
985 999
  $lxdebug->leave_sub();
986 1000
}
987 1001

  
1002
sub _post {
1003
  # inline post
1004
  post(1);
1005
}
1006

  
988 1007
sub post {
989 1008
  $lxdebug->enter_sub();
990 1009

  
1010
  my ($inline) = @_;
1011

  
1012
  my ($datepaid);
1013

  
991 1014
  # check if there is an invoice number, invoice and due date
992 1015
  $form->isblank("transdate", $locale->text('Invoice Date missing!'));
993 1016
  $form->isblank("duedate",   $locale->text('Due Date missing!'));
994 1017
  $form->isblank("customer",  $locale->text('Customer missing!'));
995 1018

  
996
  $closedto  = $form->datetonum($form->{closedto},  \%myconfig);
997
  $transdate = $form->datetonum($form->{transdate}, \%myconfig);
1019
  my $closedto  = $form->datetonum($form->{closedto},  \%myconfig);
1020
  my $transdate = $form->datetonum($form->{transdate}, \%myconfig);
998 1021
  $form->error($locale->text('Cannot post transaction for a closed period!')) if ($transdate <= $closedto);
999 1022

  
1000 1023
  $form->error($locale->text('Zero amount posting!')) 
......
1005 1028

  
1006 1029
  delete($form->{AR});
1007 1030

  
1008
  for $i (1 .. $form->{paidaccounts}) {
1031
  for my $i (1 .. $form->{paidaccounts}) {
1009 1032
    if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) {
1010 1033
      $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig);
1011 1034

  
......
1022 1045
  }
1023 1046

  
1024 1047
  # if oldcustomer ne customer redo form
1025
  ($customer) = split /--/, $form->{customer};
1048
  my ($customer) = split /--/, $form->{customer};
1026 1049
  if ($form->{oldcustomer} ne "$customer--$form->{customer_id}") {
1027
    &update;
1050
    update();
1028 1051
    exit;
1029 1052
  }
1030 1053

  
1031 1054
  $form->{AR}{receivables} = $form->{ARselected};
1032 1055
  $form->{storno}          = 0;
1033 1056

  
1057
  $lxdebug->message(0, $form->{amount});
1034 1058
  $form->{id} = 0 if $form->{postasnew};
1059
  $form->error($locale->text('Cannot post transaction!')) unless AR->post_transaction(\%myconfig, \%$form);
1035 1060

  
1036

  
1037
  if (AR->post_transaction(\%myconfig, \%$form)) {
1038
    # saving the history
1039
    if(!exists $form->{addition} && $form->{id} ne "") {
1040
      $form->{snumbers} = "invnumber_$form->{invnumber}";
1041
      $form->{addition} = "POSTED";
1042
      $form->save_history($form->dbconnect(\%myconfig));
1043
    }
1044
    # /saving the history 
1045
    remove_draft() if $form->{remove_draft};
1046
    $form->redirect($locale->text('Transaction posted!'));
1061
  # saving the history
1062
  if(!exists $form->{addition} && $form->{id} ne "") {
1063
    $form->{snumbers} = "invnumber_$form->{invnumber}";
1064
    $form->{addition} = "POSTED";
1065
    $form->save_history($form->dbconnect(\%myconfig));
1047 1066
  }
1048
  $form->error($locale->text('Cannot post transaction!'));
1067
  # /saving the history 
1068
  remove_draft() if $form->{remove_draft};
1069

  
1070
  $form->redirect($locale->text('Transaction posted!')) unless $inline;
1049 1071

  
1050 1072
  $lxdebug->leave_sub();
1051 1073
}
......
1093 1115
<form method=post action=$form->{script}>
1094 1116
|;
1095 1117

  
1096
  foreach $key (keys %$form) {
1118
  foreach my $key (keys %$form) {
1097 1119
    $form->{$key} =~ s/\"/&quot;/g;
1098 1120
    print qq|<input type=hidden name=$key value="$form->{$key}">\n|;
1099 1121
  }
......
1118 1140

  
1119 1141
sub yes {
1120 1142
  $lxdebug->enter_sub();
1121
  if (AR->delete_transaction(\%myconfig, \%$form, $spool)) {
1143
  if (AR->delete_transaction(\%myconfig, \%$form)) {
1122 1144
    # saving the history
1123 1145
    if(!exists $form->{addition}) {
1124 1146
      $form->{snumbers} = qq|invnumber_| . $form->{invnumber};
......
1136 1158
sub search {
1137 1159
  $lxdebug->enter_sub();
1138 1160

  
1161
  my ($customer, $department);
1162
  my ($jsscript, $button1, $button2, $onload);
1163

  
1139 1164
  # setup customer selection
1140 1165
  $form->all_vc(\%myconfig, "customer", "AR");
1141 1166

  
......
1376 1401
sub ar_transactions {
1377 1402
  $lxdebug->enter_sub();
1378 1403

  
1404
  my ($callback, $href, @columns);
1405

  
1406
  $form->{customer} = $form->unescape($form->{customer});
1379 1407
  ($form->{customer}, $form->{customer_id}) = split(/--/, $form->{customer});
1380 1408

  
1381 1409
  $form->{sort} ||= 'transdate';
......
1386 1414

  
1387 1415
  my $report = SL::ReportGenerator->new(\%myconfig, $form);
1388 1416

  
1389
  my @columns =
1417
  @columns =
1390 1418
    qw(transdate id type invnumber ordnumber name netamount tax amount paid
1391 1419
       datepaid due duedate transaction_description notes employee shippingpoint shipvia
1392 1420
       globalprojectnumber);
......
1394 1422
  my @hidden_variables = map { "l_${_}" } @columns;
1395 1423
  push @hidden_variables, "l_subtotal", qw(open closed customer invnumber ordnumber transaction_description notes project_id transdatefrom transdateto);
1396 1424

  
1397
  my $href = build_std_url('action=ar_transactions', grep { $form->{$_} } @hidden_variables);
1425
  $href = build_std_url('action=ar_transactions', grep { $form->{$_} } @hidden_variables);
1398 1426

  
1399 1427
  my %column_defs = (
1400 1428
    'transdate'               => { 'text' => $locale->text('Date'), },
......
1440 1468
    push @options, $locale->text('Customer') . " : $form->{customer}";
1441 1469
  }
1442 1470
  if ($form->{department}) {
1443
    ($department) = split /--/, $form->{department};
1471
    my ($department) = split /--/, $form->{department};
1444 1472
    push @options, $locale->text('Department') . " : $department";
1445 1473
  }
1446 1474
  if ($form->{invnumber}) {
......
1489 1517

  
1490 1518
  my $idx = 0;
1491 1519

  
1492
  foreach $ar (@{ $form->{AR} }) {
1520
  foreach my $ar (@{ $form->{AR} }) {
1493 1521
    $ar->{tax} = $ar->{amount} - $ar->{netamount};
1494 1522
    $ar->{due} = $ar->{amount} - $ar->{paid};
1495 1523

  
......
1544 1572
sub storno {
1545 1573
  $lxdebug->enter_sub();
1546 1574

  
1575
  # don't cancel cancelled transactions
1547 1576
  if (IS->has_storno(\%myconfig, $form, 'ar')) {
1548 1577
    $form->{title} = $locale->text("Cancel Accounts Receivables Transaction");
1549 1578
    $form->error($locale->text("Transaction has already been cancelled!"));
1550 1579
  }
1551 1580

  
1552
  # negate amount/taxes
1553
  for my $i (1 .. $form->{rowcount}) {
1554
    $form->{"amount_$i"} *= -1;
1555
    $form->{"tax_$i"}    *= -1; 
1556
  }
1557

  
1558
  # format things
1559
  for my $i (1 .. $form->{rowcount}) {
1560
    for (qw(amount tax)) {
1561
      $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) if $form->{"${_}_$i"};
1562
    }
1563
  }
1564

  
1565
  $form->{storno}      = 1;
1566
  $form->{storno_id}   = $form->{id};
1567
  $form->{id}          = 0;
1568

  
1569
  $form->{invnumber}   = "Storno-" . $form->{invnumber};
1570

  
1571
  post();
1581
  AR->storno($form, \%myconfig, $form->{id});
1572 1582

  
1573 1583
  # saving the history
1574 1584
  if(!exists $form->{addition} && $form->{id} ne "") {
......
1578 1588
  }
1579 1589
  # /saving the history 
1580 1590

  
1591
  $form->redirect(sprintf $locale->text("Transaction %d cancelled."), $form->{storno_id}); 
1592

  
1581 1593
  $lxdebug->leave_sub();
1582 1594
}

Auch abrufbar als: Unified diff