Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 840aea13

Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt

  • ID 840aea131eef33512dccc13184e01affafaafb37
  • Vorgänger 7dab0cbd
  • Nachfolger f6a5acf0

Mahnwesen: Die Tabelle dunning so umgebaut, dass gemeinsam gestartete Mahnungen auch später gemeinsam erneut ausgedruckt werden können. Dafür auch die Listenansicht bereits gestarteter Mahnungen verbessert.

Unterschiede anzeigen:

SL/DN.pm
121 121
sub save_dunning {
122 122
  $main::lxdebug->enter_sub();
123 123

  
124
  my ($self, $myconfig, $form, $rows, $userspath,$spool, $sendmail) = @_;
124
  my ($self, $myconfig, $form, $rows, $userspath, $spool, $sendmail) = @_;
125 125
  # connect to database
126 126
  my $dbh = $form->dbconnect_noauto($myconfig);
127 127

  
128 128
  my ($query, @values);
129 129

  
130
  my ($dunning_id) = selectrow_query($form, $dbh, qq|SELECT nextval('id')|);
131

  
130 132
  foreach my $row (@{ $rows }) {
131 133

  
132 134
    $form->{"interest_$row"} = $form->parse_amount($myconfig,$form->{"interest_$row"});
133 135
    $form->{"fee_$row"} = $form->parse_amount($myconfig,$form->{"fee_$row"});
134 136
    $form->{send_email} = $form->{"email_$row"};
135 137

  
136
    $query = qq|UPDATE ar SET dunning_id = ? WHERE id = ?|;
137
    @values = ($form->{"next_dunning_id_$row"}, $form->{"inv_id_$row"});
138
    $query = qq|UPDATE ar SET dunning_config_id = ? WHERE id = ?|;
139
    @values = ($form->{"next_dunning_config_id_$row"},
140
               $form->{"inv_id_$row"});
138 141
    do_query($form, $dbh, $query, @values);
142

  
139 143
    $query =
140
      qq|INSERT INTO dunning (dunning_id, dunning_level, trans_id, fee,
141
                              interest, transdate, duedate)
142
         VALUES (?, (SELECT dunning_level FROM dunning_config WHERE id = ?),
144
      qq|INSERT INTO dunning (dunning_id, dunning_config_id, dunning_level,
145
                              trans_id, fee, interest, transdate, duedate)
146
         VALUES (?, ?, (SELECT dunning_level FROM dunning_config WHERE id = ?),
143 147
                 ?, ?, ?, current_date, ?)|;
144
    @values = (conv_i($form->{"next_dunning_id_$row"}),
145
               conv_i($form->{"next_dunning_id_$row"}),
148
    @values = ($dunning_id,
149
               conv_i($form->{"next_dunning_config_id_$row"}),
150
               conv_i($form->{"next_dunning_config_id_$row"}),
146 151
               conv_i($form->{"inv_id_$row"}), $form->{"fee_$row"},
147 152
               $form->{"interest_$row"},
148 153
               conv_date($form->{"next_duedate_$row"}));
......
155 160
         template AS formname, email_subject, email_body, email_attachment,
156 161
         da.fee, da.interest, da.transdate AS dunning_date,
157 162
         da.duedate AS dunning_duedate
158
       FROM ar LEFT JOIN dunning_config ON (dunning_config.id = ar.dunning_id)
163
       FROM ar LEFT JOIN dunning_config ON (dunning_config.id = ar.dunning_config_id)
159 164
       LEFT JOIN dunning da ON (ar.id = da.trans_id AND dunning_config.dunning_level = da.dunning_level)
160 165
       WHERE ar.id IN (|
161 166
       . join(", ", map("?", @{ $form->{"inv_ids"} })) . qq|)|;
......
233 238
    $form->{keep_tmpfile} = 1;
234 239
  }
235 240

  
241
  delete($form->{tmpfile});
236 242
  $form->parse_template($myconfig, $userspath);
237 243

  
238 244
  $dbh->commit;
......
258 264
             WHERE dunning_level >
259 265
               (SELECT
260 266
                  CASE
261
                    WHEN a.dunning_id IS NULL
267
                    WHEN a.dunning_config_id IS NULL
262 268
                    THEN 0
263
                    ELSE (SELECT dunning_level FROM dunning_config WHERE id = a.dunning_id ORDER BY dunning_level LIMIT 1)
269
                    ELSE (SELECT dunning_level
270
                          FROM dunning_config
271
                          WHERE id = a.dunning_config_id
272
                          ORDER BY dunning_level
273
                          LIMIT 1)
264 274
                  END
265 275
                FROM dunning_config LIMIT 1)
266 276
             LIMIT 1)) |;
......
289 299
  }
290 300

  
291 301
  if ($form->{dunning_level}) {
292
    $where .= qq| AND a.dunning_id = ?|;
302
    $where .= qq| AND a.dunning_config_id = ?|;
293 303
    push(@values, conv_i($form->{dunning_level}));
294 304
  }
295 305

  
......
310 320
         a.duedate + dnn.terms - current_date AS nextlevel,
311 321
         $paymentdate - a.duedate AS pastdue, dn.dunning_level,
312 322
         current_date + dnn.payment_terms AS next_duedate,
313
         dnn.dunning_description AS next_dunning_description, dnn.id AS next_dunning_id,
323
         dnn.dunning_description AS next_dunning_description, dnn.id AS next_dunning_config_id,
314 324
         dnn.interest AS interest_rate, dnn.terms
315 325
       FROM dunning_config dnn, ar a
316 326
       JOIN customer ct ON (a.customer_id = ct.id)
317
       LEFT JOIN dunning_config dn ON (dn.id = a.dunning_id)
327
       LEFT JOIN dunning_config dn ON (dn.id = a.dunning_config_id)
318 328
       LEFT JOIN dunning da ON ((da.trans_id = a.id) AND (dn.dunning_level = da.dunning_level))
319 329
       $where
320 330
       ORDER BY a.id, transdate, duedate, name|;
......
378 388
  }
379 389

  
380 390
  if ($form->{dunning_level}) {
381
    $where .= qq| AND a.dunning_id = ?|;
391
    $where .= qq| AND a.dunning_config_id = ?|;
382 392
    push(@values, conv_i($form->{dunning_level}));
383 393
  }
384 394

  
......
389 399
  }
390 400

  
391 401
  if (!$form->{showold}) {
392
    $where .= qq| AND (a.amount > a.paid) AND (da.dunning_id = a.dunning_id) |;
402
    $where .= qq| AND (a.amount > a.paid) AND (da.dunning_config_id = a.dunning_config_id) |;
393 403
  }
394 404

  
395 405
  if ($form->{transdatefrom}) {
......
411 421

  
412 422
  $query =
413 423
    qq|SELECT a.id, a.ordnumber, a.invoice, a.transdate, a.invnumber, a.amount,
414
        ct.name AS customername, ct.id AS customer_id, a.duedate, da.fee,
415
        da.interest, dn.dunning_description, da.transdate AS dunning_date, da.duedate AS dunning_duedate, da.dunning_id
416
      FROM ar a
417
      JOIN customer ct ON (a.customer_id = ct.id), dunning da
418
      LEFT JOIN dunning_config dn ON (da.dunning_id = dn.id)
419
      $where
420
      ORDER BY name, a.id|;
424
         ct.name AS customername, ct.id AS customer_id, a.duedate, da.fee,
425
         da.interest, dn.dunning_description, da.transdate AS dunning_date,
426
         da.duedate AS dunning_duedate, da.dunning_id, da.dunning_config_id
427
       FROM ar a
428
       JOIN customer ct ON (a.customer_id = ct.id), dunning da
429
       LEFT JOIN dunning_config dn ON (da.dunning_config_id = dn.id)
430
       $where
431
       ORDER BY name, a.id|;
421 432

  
422 433
  $form->{DUNNINGS} = selectall_hashref_query($form, $dbh, $query, @values);
423 434

  
......
485 496

  
486 497
  my ($self, $myconfig, $form, $userspath) = @_;
487 498

  
488
  map({ $_ =~ s|.*/||g; } @{ $form->{DUNNING_PDFS} });
489

  
490 499
  foreach my $file (@{ $form->{DUNNING_PDFS} }) {
491 500
    $inputfiles .= " $userspath/$file ";
492 501
  }
......
543 552
sub print_dunning {
544 553
  $main::lxdebug->enter_sub();
545 554

  
546
  my ($self, $myconfig, $form, $dunning_id, $customer_id, $userspath,$spool, $sendmail) = @_;
555
  my ($self, $myconfig, $form, $dunning_id, $userspath,$spool, $sendmail) = @_;
547 556
  # connect to database
548 557
  my $dbh = $form->dbconnect_noauto($myconfig);
549 558

  
......
552 561
         ar.transdate, ar.duedate, paid, amount - paid AS open_amount,
553 562
         template AS formname, email_subject, email_body, email_attachment,
554 563
         da.fee, da.interest, da.transdate AS dunning_date, da.duedate AS dunning_duedate
555
       FROM ar
556
       LEFT JOIN dunning_config ON (dunning_config.id = ar.dunning_id)
557
       LEFT JOIN dunning da ON ((ar.id = da.trans_id) AND (dunning_config.dunning_level = da.dunning_level))
558
       WHERE (ar.dunning_id = ?) AND (customer_id = ?)|;
564
       FROM dunning da
565
       LEFT JOIN dunning_config ON (dunning_config.id = da.dunning_config_id)
566
       LEFT JOIN ar ON (ar.id = da.trans_id)
567
       WHERE (da.dunning_id = ?)|;
559 568

  
560
  my $sth = prepare_execute_query($form, $dbh, $query, $dunning_id, $customer_id);
569
  my $sth = prepare_execute_query($form, $dbh, $query, $dunning_id);
561 570
  my $first = 1;
562 571
  while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
563 572
    if ($first) {

Auch abrufbar als: Unified diff