Business-cXML
view release on metacpan or search on metacpan
lib/Business/cXML/Message/PunchOutOrder.pm view on Meta::CPAN
Object representation of a cXML punch-out order.
=head1 METHODS
See L<Business::cXML::Object/COMMON METHODS>.
=head1 PROPERTY METHODS
See L<Business::cXML::Object/PROPERTY METHODS> for how the following operate.
=over
=cut
use 5.014;
use strict;
package Business::cXML::Message::PunchOutOrder;
use base qw(Business::cXML::Object);
use constant {
CXML_POOM_STATUS_PENDING => 1,
CXML_POOM_STATUS_FINAL => 2,
};
use constant NODENAME => 'PunchOutOrderMessage';
use constant PROPERTIES => (
buyer_cookie => ' ',
highest_operation => 'create',
status => undef,
total => undef,
shipto => undef,
shipping => undef,
tax => undef,
items => [],
id => undef,
);
use constant OBJ_PROPERTIES => (
total => [ 'Business::cXML::Amount', 'Total' ],
shipto => 'Business::cXML::ShipTo',
shipping => [ 'Business::cXML::Amount', 'Shipping' ],
tax => [ 'Business::cXML::Amount', 'Tax' ],
items => 'Business::cXML::ItemIn',
);
use Business::cXML::Amount;
use Business::cXML::ItemIn;
use Business::cXML::ShipTo;
use XML::LibXML::Ferry;
sub _from_status {
my ($self, $val) = @_;
return CXML_POOM_STATUS_FINAL if $val eq 'final';
return CXML_POOM_STATUS_PENDING;
}
sub from_node {
my ($self, $el) = @_;
$el->ferry($self, {
BuyerCookie => 'buyer_cookie',
PunchOutOrderMessageHeader => {
operationAllowed => 'highest_operation',
quoteStatus => [ 'status', \&_from_status ],
SourcingStatus => '__UNIMPLEMENTED',
Total => [ 'total', 'Business::cXML::Amount' ],
ShipTo => [ 'shipto', 'Business::cXML::ShipTo' ],
Shipping => [ 'shipping', 'Business::cXML::Amount' ],
Tax => [ 'tax', 'Business::cXML::Amount' ],
SupplierOrderInfo => {
orderID => 'id',
orderDate => '__UNIMPLEMENTED',
},
},
ItemIn => [ 'items', 'Business::cXML::ItemIn' ],
}
);
}
sub to_node {
my ($self, $doc) = @_;
my $node = $doc->create($self->{_nodeName});
$node->add('BuyerCookie', $self->{buyer_cookie});
my $head = $node->add('PunchOutOrderMessageHeader', undef,
operationAllowed => $self->{highest_operation},
);
$head->{quoteStatus} = ($self->is_final ? 'final' : 'pending') if defined $self->{status};
# UNIMPLEMENTED: SourcingStatus
$self->total({}) unless defined $self->{total};
$head->add($self->{total}->to_node($node));
$head->add($self->{shipto}->to_node($node)) if defined $self->{shipto};
$head->add($self->{shipping}->to_node($node)) if defined $self->{shipping};
$head->add($self->{tax}->to_node($node)) if defined $self->{tax};
$head->add('SupplierOrderInfo', undef, orderID => $self->{id}) if defined $self->{id};
$node->add($_->to_node($node)) foreach (@{ $self->{items} });
return $node;
}
=item C<B<is_pending>( [I<$bool>] )>
=item C<B<is_final>( [I<$bool>] )>
Respectively gets or sets whether the order is in pending or final status.
There is no status at all by default.
=cut
sub is_pending {
my ($self, $bool) = @_;
$self->{status} = CXML_POOM_STATUS_PENDING if $bool;
return $self->{status} == CXML_POOM_STATUS_PENDING;
}
sub is_final {
my ($self, $bool) = @_;
$self->{status} = CXML_POOM_STATUS_FINAL if $bool;
return $self->{status} == CXML_POOM_STATUS_FINAL;
}
=item C<B<buyer_cookie>>
Mandatory, cookie from original punch-out setup request
=item C<B<highest_operation>>
Mandatory, highest operation that we allow on this order. One of: C<create>
(default), C<inspect>, C<edit>
=item C<B<total>>
Mandatory, L<Business::cXML::Amount> object of type C<Total>
=item C<B<shipto>>
Optional, L<Business::cXML::ShipTo> object
=item C<B<shipping>>
Optional, L<Business::cXML::Amount> object of C<Shipping> type (includes
( run in 0.880 second using v1.01-cache-2.11-cpan-39bf76dae61 )