The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Business::TNTPost::NL::Data;
use strict;
use base 'Exporter';
use vars qw($VERSION @EXPORT @EXPORT_OK %EXPORT_TAGS);

use Carp;
use YAML;

$VERSION   = 0.11;
@EXPORT    = qw();
@EXPORT_OK = qw(zones table);
%EXPORT_TAGS = ("ALL" => [@EXPORT_OK]);

=pod

=head1 NAME

Business::TNTPost::NL::Data - Shipping cost data for Business::TNTPost::NL

=head1 DESCRIPTION

Data module for Business::TNTPost::NL containing shipping cost
information, country zones etc.

Nothing to see here, the show is over, move along please.

=head2 METHODS

The following methods are used and can be exported

=head3 zones

Returns a hashref with country and zone numbers

=cut

sub zones {
   my %zones = (
      0 => [ qw(NL) ],                                      # NL
      1 => [ qw(BE LU DK DE FR IT AT ES GB SE) ],           # EU 1
      2 => [ qw(BG EE FI HU IE LV LT PL PT RO SI SK CZ) ],  # EU 2
      3 => [ qw(AL AD BA IC CY FO GI GR GL IS HR LI MK MD MT
                ME NO UA SM RS TR VA BY CH) ],              # EU 3
   );
   my %z;
   foreach my $key (keys %zones) {
      foreach my $val (@{$zones{$key}}) {
         $z{$val} = $key;
      }
   }
   return \%z;
}

=pod

=head3 table

This method contains the heart of this module, the lookup table

=cut

sub table {
my $table = Load(<<'...');
---
# Netherlands
netherlands:
  # Letters (brievenbuspost)
  small:
    stamp:
      '0,20': 0.46
      '21,50': 0.92
      '51,100': 1.38
      '101,250': 1.84
      '251,500': 2.30
      '501,2000': 2.76
    machine:
      '0,20': 0.42
      '21,50': 0.84
      '51,100': 1.26
      '101,250': 1.67
      '251,500': 2.09
      '501,2000': 2.51
  # Parcels (paketten)
  large:
    '0,10000': 6.75
    '10001,30000': 12.20
  # Register (aangetekend)
  register:
    stamp:
      '0,2000': 7.00
      '2001,20000': 8.05
      '20001,30000': 13.50
    machine:
      '0,2000': 6.79
      '2001,10000': 8.05
# Outside of the Netherlands
world:
  basic:
    # Within Europe (EU1 & EU2)
    europe:
      # Letters (brievenbuspost)
      small:
        stamp:
          priority:
            '0,20': 0.79
            '21,50': 1.58
            '51,100': 2.37
            '101,250': 3.16
            '251,500': 6.32
            '501,2000': 8.69
        machine:
          priority:
            '0,20': 0.77
            '21,50': 1.53
            '51,100': 2.30
            '101,250': 3.07
            '251,500': 6.13
            '501,2000': 8.43
    # Outside Europe
    world:
      # Letters (brievenbuspost)
      small:
        stamp:
          priority:
            '0,20': 0.95
            '21,50': 1.90
            '51,100': 2.85
            '101,250': 5.70
            '251,500': 10.45
            '501,2000': 16.15
        machine:
          priority:
            '0,20': 0.92
            '21,50': 1.84
            '51,100': 2.76
            '101,250': 5.53
            '251,500': 10.14
            '501,2000': 15.67
  # Internationaal Pakket Plus (Track&Trace)
  plus:
    zone:
      # EU1
      1:
        '0,2000': 13.00
        '2001,5000': 19.50
        '5001,10000': 25.00
        '10001,20000': 34.00
        '20001,30000': 40.46
      # EU2
      2:
        '0,2000': 18.50
        '2001,5000': 25.00
        '5001,10000': 31.00
        '10001,20000': 40.00
        '20001,30000': 47.60
      # EU3
      3:
        '0,2000': 19.30
        '2001,5000': 26.30
        '5001,10000': 32.30
        '10001,20000': 42.30
      # RoW
      4:
        '0,2000': 24.30
        '2001,5000': 34.30
        '5001,10000': 58.30
        '10001,20000': 105.30
  # Register ("aangetekend")
  register:
    europe:
      stamp:
        '0,2000': 9.48
      machine:
        '0,2000': 9.20
    world:
      stamp:
        '0,2000': 16.15
      machine:
        '0,2000': 15.67
...
   return $table;
}

=pod

=head1 AUTHOR

Menno Blom,
E<lt>blom@cpan.orgE<gt>,
L<http://menno.b10m.net/perl/>

=head1 COPYRIGHT

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

The full text of the license can be found in the
LICENSE file included with this module.

=head1 SEE ALSO

L<Business::TNTPost::NL>,
L<http://www.tntpost.nl/>

=cut

1;