NAME

Business::DPD::Label - one DPD label

SYNOPSIS

use Business::DPD::Label;
my $label = Business::DPD::Label->new( $dpd, {
    zip             => '12555',
    country         => 'DE',
    depot           => '1090',
    serial          => '50123456%0878',
    service_code    => '101',    
    weight          => '6 kg',
});
$label->calc_fields;
say $label->tracking_number;
say $label->d_sort;

use Business::DPD::Label;
my $label2 = Business::DPD::Label->new( $dpd, {
    address => Business::DPD::Address->new($dpd, {
        name1   => 'Hans Mustermann GmbH',
        street  => 'Musterstr. 12a',
        postal  => '63741',
        city    => 'Aschaffenburg',
        country => 'DE',
        phone   => '06021/112',
    }),
    serial          => '9700001010',
    service_code    => '101',
    shipment_count_this => 1,
    shipment_count_total => 2,
    reference_number => [ 'Testpaket2' ],
    weight_g        => 6000,
});

DESCRIPTION

Calculate the data that's needed for a valid addresse label.

METHODS

Public Methods

new

my $label = Business::DPD::Label->new( $dpd, {
    zip             => '12555',
    country         => 'DE',
    depot           => '1090',
    serial          => '5012345678',
    service_code    => '101',
});

TODO?: take a Business::DPD::Address as an agrument (instead of zip & country)

calc_fields

$label->calc_fields;

Calculate all caluclatable fields from the provided data using the DPD database from $schema:

target_country

calc_tracking_number

$label->calc_tracking_number;

Calulates the tracking number and stores it in tracking_number. tracking_number consists of

DDDDXXLLLLLLLLP
   | |     |  |
   | |     |  +-> iso7064_mod37_36_checksum      L
   | |     +----> serial                         12345678
   | +----------> first two positions of serial  50
   +------------> depot                          1090

We additionally store the checksum in checksum_tracking_number and the tracking_number_without_checksum

calc_routing

$label->calc_routing;
$label->o_sort

Calculates the following fields:

o_sort d_sort d_depot barcode_id

calc_target_country_code

$label->calc_target_country_code;

Store the numeric country code from the alpha2 target country (i.e.: 'DE' -> 276) into target_country_code

service_text

$label->service_text

Returns the service text for the given service code

calc_barcode

$label->calc_barcode;

Generate the various parts of the barcode, which are:

  • code

    PPPPPPPTTTTTTTTTTTTTTSSSCCC

  • code_human

    PPPPPPPTTTTTTTTTTTTTTSSSCCCP

  • code_barcode

    IPPPPPPPTTTTTTTTTTTTTTSSSCCC

And here's the explanation of those strange letter:

IPPPPPPPTTTTTTTTTTTTTTSSSCCCP
|   |          |       |  | |
|   |          |       |  | +-> iso7064_mod37_36_checksum         Z
|   |          |       |  +---> target_country_code               276
|   |          |       +------> service_code                      101
|   |          +--------------> tracking_number_without_checksum  01905002345615
|   +-------------------------> zip (zero padded)                 0012555
+-----------------------------> barcode_id                        %                   

TODO

* weiters:

kennzeichnung (kleingewicht, Express) Servicetext Servicecode

needed methods

* one object for one address * required fields ** target country ** target zipcode ** laufende nummer ** depot number ** service code * semi-required ** address data * optional ** referenznummer ** auftragsnummer ** gewicht ** n of m ** template

AUTHOR

RevDev <we {at} revdev.at>

SEE ALSO

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.