kivitendo/SL/DATEV/KNEFile.pm @ 996ddb70
40d52f50 | Moritz Bunkus | package SL::DATEV::KNEFile;
|
|
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;
|
|||
$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;
|