Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision b6dc5623

Von Sven Schöling vor fast 17 Jahren hinzugefügt

  • ID b6dc5623d93c1be1c54248d4512e80f495af2899
  • Vorgänger ac517355
  • Nachfolger 270df900
  • Auslagerung der OE-Masken in Templates *

Diese Patch ist ein Merge der Revisionen
2866, 5349, 5365, 5370, 5408, 5413, 5470, 5473, 5475, 5519, 5520, 5521, 5524, 5526, 5591, 5618, 5622, 5814, 5881, 5882 und 5961
in das Unstable.

Hintergrund ist die Auslagerung der OE-Masken, das heisst aller Masken, die fuer Auftraege, Angebote und teilweise Rechnungen zustaendig sind.
Dadurch vereinfacht sich der Code an vielen Stellen deutlich, ausserdem konnten viele Berechnungen verkleinert werden, weil der Code fuer Angebote/Auftraege jetzt getrennt von Rechnungen liegt.

Ein Grossteil der bin/mozilla/io.pl wurde dafuer dubliziert, die Methoden die fuer Auftraege noetig sind liegen jetzt in der bin/mozilla/oe.pl (vor allem display_form und display_row, aber auch ein paar andere), ihr jeweiliges Pendant fuer Rechnungen wurde unveraendert in eine Datei invoice_io.pl ausgelagert die von den Skripten die sie benoetigen zusaetzlich zur io.pl eingelesen wird.

Wie der Name der Templates andeutet ist der Patch im Verkaufsbaum entstanden, im Verlauf der Programmierung habe cih aber nicht genug Unterschiede gefunden um separate Templates fuer Verkauf und Einkauf zu rechtfertigen. Eventuell werden die Templates noch umbenannt.

Komplexe Maskenaenderungen wie der Austausch von Drop-Down Menues bei zu grosser Anzahl durch Eingabefelder werden ebenfalls noch manuell gemacht.
Auch das wird in der naechsten Version ausgelagert um den Backend Code schlanker zu machen.

Die Berechnung fuer Units und Steuern wurde vereinfacht, und dabei einige unschoene Bugs gefixt, die aus der unvollstaendigen Abdeckung von Verzweigungen resultierten.

Zuletzt wurden noch fast alle serverseitigen Datenformatierungen ausgelagert in ein Templateplugin, welches Zahlen waehrend des Templatings formatiert (mehr dazu in der Dakumentation zu Template.pm).

Der Patch beinhaltet ausserdem die ueblichen Codekosmetika.

Unterschiede anzeigen:

SL/IR.pm
811 811
sub get_vendor {
812 812
  $main::lxdebug->enter_sub();
813 813

  
814
  my ($self, $myconfig, $form) = @_;
814
  my ($self, $myconfig, $form, $params) = @_;
815

  
816
  $params = $form unless defined $params && ref $params eq "HASH";
817
  $main::lxdebug->message(0, Dumper($params));
815 818

  
816 819
  # connect to database
817 820
  my $dbh = $form->dbconnect($myconfig);
......
819 822
  my $dateformat = $myconfig->{dateformat};
820 823
  $dateformat .= "yy" if $myconfig->{dateformat} !~ /^y/;
821 824

  
822
  my $vid = conv_i($form->{vendor_id});
825
  my $vid = conv_i($params->{vendor_id});
826
  my $vnr = conv_i($params->{vendornumber});
823 827

  
824 828
  my $duedate =
825
    ($form->{invdate})
826
    ? "to_date(" . $dbh->quote($form->{invdate}) . ", '$dateformat')"
829
    ($params->{invdate})
830
    ? "to_date(" . $dbh->quote($params->{invdate}) . ", '$dateformat')"
827 831
    : "current_date";
828 832

  
829 833
  # get vendor
834
  @values = ();
835
  if ($vid) {
836
    $where .= 'AND v.id = ?';
837
    push @values, $vid;
838
  }
839
  if ($vnr) {
840
    $where .= 'AND v.vendornumber = ?';
841
    push @values, $vnr;
842
  }
830 843
  my $query =
831 844
    qq|SELECT
832
         v.name AS vendor, v.creditlimit, v.terms, v.notes AS intnotes,
845
         v.id, v.name AS vendor, v.creditlimit, v.terms, v.notes AS intnotes,
833 846
         v.email, v.cc, v.bcc, v.language_id, v.payment_id,
834 847
         v.street, v.zipcode, v.city, v.country, v.taxzone_id,
835 848
         $duedate + COALESCE(pt.terms_netto, 0) AS duedate,
......
837 850
       FROM vendor v
838 851
       LEFT JOIN business b       ON (b.id = v.business_id)
839 852
       LEFT JOIN payment_terms pt ON (v.payment_id = pt.id)
840
       WHERE v.id = ?|;
841
  $ref = selectfirst_hashref_query($form, $dbh, $query, $vid);
842
  map { $form->{$_} = $ref->{$_} } keys %$ref;
853
       WHERE 1=1 $where|;
854
  $ref = selectfirst_hashref_query($form, $dbh, $query, @values);
855
  map { $params->{$_} = $ref->{$_} } keys %$ref;
843 856

  
844
  $form->{creditremaining} = $form->{creditlimit};
857
  $params->{creditremaining} = $params->{creditlimit};
845 858

  
846 859
  $query = qq|SELECT SUM(amount - paid) FROM ap WHERE vendor_id = ?|;
847 860
  my ($unpaid_invoices) = selectfirst_array_query($form, $dbh, $query, $vid);
848
  $form->{creditremaining} -= $unpaid_invoices;
861
  $params->{creditremaining} -= $unpaid_invoices;
849 862

  
850 863
  $query = qq|SELECT o.amount,
851 864
                (SELECT e.sell
......
857 870
  my $sth = prepare_execute_query($form, $dbh, $query, $vid);
858 871
  while (my ($amount, $exch) = $sth->fetchrow_array()) {
859 872
    $exch = 1 unless $exch;
860
    $form->{creditremaining} -= $amount * $exch;
873
    $params->{creditremaining} -= $amount * $exch;
861 874
  }
862 875
  $sth->finish();
863 876

  
864 877
  # get shipto if we do not convert an order or invoice
865
  if (!$form->{shipto}) {
866
    delete @{$form}{qw(shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax shiptoemail)};
878
  if (!$params->{shipto}) {
879
    delete @{$params}{qw(shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax shiptoemail)};
867 880

  
868 881
    $query = qq|SELECT * FROM shipto WHERE (trans_id = ?) AND (module= 'CT')|;
869 882
    $ref = selectfirst_hashref_query($form, $dbh, $query, $vid);
870
    @{$form}{keys %$ref} = @{$ref}{keys %$ref};
871
    map { $form->{$_} = $ref->{$_} } keys %$ref;
883
    @{$params}{keys %$ref} = @{$ref}{keys %$ref};
884
    map { $params->{$_} = $ref->{$_} } keys %$ref;
872 885
  }
873 886

  
874
  if (!$form->{id} && $form->{type} !~ /_(order|quotation)/) {
887
  if (!$params->{id} && $params->{type} !~ /_(order|quotation)/) {
875 888
    # setup last accounts used
876 889
    $query =
877 890
      qq|SELECT c.id, c.accno, c.description, c.link, c.category
......
888 901
      if ($ref->{category} eq 'E') {
889 902
        $i++;
890 903

  
891
        if ($form->{initial_transdate}) {
904
        if ($params->{initial_transdate}) {
892 905
          my $tax_query = qq|SELECT tk.tax_id, t.rate FROM taxkeys tk
893 906
                             LEFT JOIN tax t ON (tk.tax_id = t.id)
894 907
                             WHERE (tk.chart_id = ?) AND (startdate <= ?)
895 908
                             ORDER BY tk.startdate DESC
896 909
                             LIMIT 1|;
897
          my ($tax_id, $rate) = selectrow_query($form, $dbh, $tax_query, $ref->{id}, $form->{initial_transdate});
898
          $form->{"taxchart_$i"} = "${tax_id}--${rate}";
910
          my ($tax_id, $rate) = selectrow_query($form, $dbh, $tax_query, $ref->{id}, $params->{initial_transdate});
911
          $params->{"taxchart_$i"} = "${tax_id}--${rate}";
899 912
        }
900 913

  
901
        $form->{"AP_amount_$i"} = "$ref->{accno}--$tax_id";
914
        $params->{"AP_amount_$i"} = "$ref->{accno}--$tax_id";
902 915
      }
903 916

  
904 917
      if ($ref->{category} eq 'L') {
905
        $form->{APselected} = $form->{AP_1} = $ref->{accno};
918
        $params->{APselected} = $params->{AP_1} = $ref->{accno};
906 919
      }
907 920
    }
908
    $form->{rowcount} = $i if ($i && !$form->{type});
921
    $params->{rowcount} = $i if ($i && !$params->{type});
909 922
  }
910 923

  
911 924
  $dbh->disconnect();

Auch abrufbar als: Unified diff