NAME

Interchange6::Schema::Result::Zone

DESCRIPTION

In the context of zones the term 'state' refers to state, province or other principal subdivision of a country as defined in ISO 3116-2. Countries to be added to a zone must already exist in Interchange6::Schema::Result::Country and states in Interchange6::Schema::Result::State.

Zones can contain any of the following:

  • No countries and no states

    An empty zone must be created before countries/states are added but otherwise is probably not useful.

  • Multiple countries

    For example to create a trading group like the European Union.

  • A single country

  • A single country with a single state

    For example Quebec in Canada which has GST + QST

  • A single country with multiple states

    For example a group containing all Canadian provinces that charge only GST.

The following combinations are NOT allowed:

  • Multiple countries with one or more states

  • One or more states with no country

Countries and states should be added to and removed from the zone using these methods which are described further below:

  • add_countries

  • remove_countries

  • add_states

  • remove_states

NOTE: avoid using other methods from DBIx::Class::Relationship::Base since you may inadvertently end up with an invalid zone.

ACCESSORS

zones_id

Primary Key.

zone

For example for storing the UPS/USPS zone code or a simple name for the zone.

Unique constraint.

created

Date and time when this record was created returned as DateTime object. Value is auto-set on insert.

last_modified

Date and time when this record was last modified returned as DateTime object. Value is auto-set on insert and update.

RELATIONS

zone_countries

Type: has_many

Related object: Interchange6::Schema::Result::ZoneCountry

countries

Type: many_to_many

Accessor to related country results ordered by name.

zone_states

Type: has_many

Related object: Interchange6::Schema::Result::ZoneState

states

Type: many_to_many

Accessor to related state results ordered by name.

shipment_destinations

has_many relationship with Interchange6::Schema::Result::ShipmentDestination

shipment_methods

many_to_many relationship to shipment_method. Currently it ignores the active field in shipment_destinations.

METHODS

new

Overloaded method. We allow a form of multi-create here so you can do something like:

$schema->resultset('Zone')->create({
    zone      => 'some states of the USA',
    countries => [ 'US' ],
    states    => [ 'CA', 'PA' ],
});

If there is only a single country or state the value can be a scalar instead of a hashref.

add_countries

Argument is one of:

an Interchange6::Schema::Result::Country object
a country ISO code
an arrayref of the above (can include a mixture of both)

Returns the zone object on success.

has_country

Argument can be Interchange6::Schema::Result::Country, country name or iso code. Returns 1 if zone includes that country else 0;

country_count

Takes no args. Returns the number of countries in the zone.

remove_countries

Argument is either a Interchange6::Schema::Result::Country object or an arrayref of the same.

Throws an exception on failure.

add_states

Argument is one of:

an Interchange6::Schema::Result::State object
a state ISO code
an arrayref of the above (can include a mixture of both)

Returns the zone object on success.

has_state

Argument can be Interchange6::Schema::Result::State, state name or iso code. Returns 1 if zone includes that state else 0;

state_count

Takes no args. Returns the number of states in the zone.

remove_states

Argument is either a Interchange6::Schema::Result::State object or an arrayref of the same.

Returns the Zone object or undef on failure. Errors are available via errors method inherited from Interchange6::Schema::Role::Errors.