Revision bbb2befc
Von Jan Büren vor mehr als 2 Jahren hinzugefügt
| SL/DB/Helper/Payment.pm | ||
|---|---|---|
|  | ||
| use parent qw(Exporter);
 | ||
| our @EXPORT = qw(pay_invoice);
 | ||
| our @EXPORT_OK = qw(skonto_date amount_less_skonto within_skonto_period percent_skonto reference_account reference_amount open_amount open_percent remaining_skonto_days skonto_amount check_skonto_configuration valid_skonto_amount get_payment_suggestions validate_payment_type open_sepa_transfer_amount get_payment_select_options_for_bank_transaction exchangerate forex _skonto_charts_and_tax_correction);
 | ||
| our @EXPORT_OK = qw(skonto_date amount_less_skonto within_skonto_period percent_skonto reference_account open_amount skonto_amount check_skonto_configuration valid_skonto_amount get_payment_suggestions validate_payment_type open_sepa_transfer_amount get_payment_select_options_for_bank_transaction exchangerate forex _skonto_charts_and_tax_correction);
 | ||
| our %EXPORT_TAGS = (
 | ||
|   "ALL" => [@EXPORT, @EXPORT_OK],
 | ||
| );
 | ||
| ... | ... | |
|   return $reference_account;
 | ||
| };
 | ||
|  | ||
| sub reference_amount {
 | ||
|   my $self = shift;
 | ||
|  | ||
|   my $is_sales = ref($self) eq 'SL::DB::Invoice';
 | ||
|  | ||
|   require SL::DB::Manager::AccTransaction;
 | ||
|  | ||
|   my $link_filter = $is_sales ? 'AR' : 'AP';
 | ||
|  | ||
|   my $acc_trans = SL::DB::Manager::AccTransaction->find_by(
 | ||
|      trans_id   => $self->id,
 | ||
|      SL::DB::Manager::AccTransaction->chart_link_filter("$link_filter")
 | ||
|   );
 | ||
|  | ||
|   return undef unless ref $acc_trans;
 | ||
|  | ||
|   # this should be the same as $self->amount
 | ||
|   return $acc_trans->amount;
 | ||
| };
 | ||
|  | ||
|  | ||
| sub open_amount {
 | ||
|   my $self = shift;
 | ||
|  | ||
| ... | ... | |
|   return ($self->amount // 0) - ($self->paid // 0);
 | ||
| };
 | ||
|  | ||
| sub open_percent {
 | ||
|   my $self = shift;
 | ||
|  | ||
|   return 0 if $self->amount == 0;
 | ||
|   my $open_percent;
 | ||
|   if ( $self->open_amount < 0 ) {
 | ||
|     # overpaid, currently treated identically
 | ||
|     $open_percent = $self->open_amount * 100 / $self->amount;
 | ||
|   } else {
 | ||
|     $open_percent = $self->open_amount * 100 / $self->amount;
 | ||
|   };
 | ||
|  | ||
|   return _round($open_percent) || 0;
 | ||
| };
 | ||
|  | ||
| sub skonto_amount {
 | ||
|   my $self = shift;
 | ||
|  | ||
|   return $self->amount - $self->amount_less_skonto;
 | ||
| };
 | ||
|  | ||
| sub remaining_skonto_days {
 | ||
|   my $self = shift;
 | ||
|  | ||
|   return undef unless ref $self->skonto_date;
 | ||
|  | ||
|   my $dur = DateTime::Duration->new($self->skonto_date - DateTime->today);
 | ||
|   return $dur->delta_days();
 | ||
|  | ||
| };
 | ||
|  | ||
| sub percent_skonto {
 | ||
|   my $self = shift;
 | ||
|  | ||
| ... | ... | |
|  | ||
| sub open_sepa_transfer_amount {
 | ||
|   my $self = shift;
 | ||
|  | ||
| #  die "was buggy for ar and not really in use at all";
 | ||
|   my ($vc, $key, $type);
 | ||
|   if ( ref($self) eq 'SL::DB::Invoice' ) {
 | ||
|     $vc   = 'customer';
 | ||
|     $key  = 'ap_id';
 | ||
|     $key  = 'ar_id';  # BUGGY ar_id
 | ||
|     $type = 'ar';
 | ||
|   } else {
 | ||
|     $vc   = 'vendor';
 | ||
| ... | ... | |
| Unrounded total open amount of invoice (amount - paid).
 | ||
| Doesn't take into account pending SEPA transfers.
 | ||
|  | ||
| =item C<open_percent>
 | ||
|  | ||
| Percentage of the invoice that is still unpaid, e.g. 100,00 if no payments have
 | ||
| been made yet, 0,00 if fully paid.
 | ||
|  | ||
| =item C<remaining_skonto_days>
 | ||
|  | ||
| How many days skonto can still be taken, calculated from current day. Returns 0
 | ||
| if current day is the max skonto date, and negative number if skonto date has
 | ||
| already passed.
 | ||
|  | ||
| Returns undef if skonto is not configured for that invoice.
 | ||
|  | ||
| =item C<get_payment_suggestions %params>
 | ||
|  | ||
| Creates data intended for an L.select_tag dropdown that can be used in a
 | ||
Auch abrufbar als: Unified diff
Payment-Helper: offensichtlich toten Code (Methoden) entfernt
Ferner einen Bug in einer Methode gefixt, die aber auch nie
richtig verwendet worden ist.