Projekt

Allgemein

Profil

Herunterladen (1,53 KB) Statistiken
| Zweig: | Markierung: | Revision:
package SL::DATEV::KNEFile;

use strict;

sub new {
my $type = shift;
my $self = {};

bless $self, $type;

$self->_init(@_);

return $self;
}

sub _init {
my $self = shift;
my %params = @_;

map { $self->{$_} = $params{$_} } keys %params;

$self->{remaining_bytes} = 250;
$self->{block_count} = 0;
$self->{data} = '';
}

sub get_data {
my $self = shift;

return $self->{data} || '';
}

sub get_block_count {
my $self = shift;

return $self->{block_count};
}

sub add_block {
my $self = shift;
my $block = shift;

my $block_len = length $block;


$self->flush() if ($block_len > $self->{remaining_bytes});

$self->{data} .= $block;
$self->{remaining_bytes} -= $block_len;

return $self;
}

sub flush {
my $self = shift;

if (250 == $self->{remaining_bytes}) {
return $self;
}

my $num_zeros = 6 + $self->{remaining_bytes};
$self->{data} .= "\x00" x $num_zeros;

$self->{remaining_bytes} = 250;
$self->{block_count}++;

return $self;
}

sub format_amount {
my $self = shift;
my $amount = shift;
my $width = shift;
our $stellen;

$amount =~ s/-//;
my ($places, $decimal_places) = split m/\./, "$amount";

$places *= 1;
$decimal_places ||= 0;

if (0 < $width) {
$width -= 2;
$places = sprintf("\%0${stellen}d", $places);
}

$decimal_places .= '0' if (2 > length $decimal_places);
$amount = $places . substr($decimal_places, 0, 2);
$amount *= 1 if (!$width);

return $amount;
}

1;
    (1-1/1)