Revision 563 (by ahitrov, 2016/04/12 12:53:34) Payment plugin contenido interface. Order finder and order actions

package payments::Keeper;

use strict;
use warnings 'all';
use base qw(Contenido::Keeper);


use Contenido::Globals;

sub add {
    my $self = shift;
    my (%opts) = @_;

    return undef	unless $opts{type} && ( $opts{order} && ref $opts{order} || $opts{uid} && $opts{order} && $opts{sum});
    return undef	unless $opts{type} =~ /^(create|suspend|cancel|append|reform)$/;

    my $op = payments::Operation->new( $keeper );
    $op->status(1);
    $op->name( $opts{type} );
    if ( ref $opts{order} ) {
	$op->uid( $opts{order}->uid );
	$op->order_id( $opts{order}->id );
	$op->sum( $opts{order}->sum_total );
    } else {
	$op->uid( $opts{uid} );
	$op->order_id( $opts{order} );
	$op->sum( $opts{sum} );
    }
    $op->store;

    return $op;
}


sub check {
    my $self = shift;
    my $order_id = shift;
    return undef	unless $order_id;

    my $ops = $keeper->get_documents(
		class   => 'payments::Operation',
		order_id        => $order_id,
		order_by        => 'ctime',
		return_mode     => 'array_ref',
	);
    if ( ref $ops eq 'ARRAY' && @$ops ) {
	return $ops->[-1];
    }
    return undef;
}

sub get_order {
    my $self = shift;
    my $order_id = shift;
    return undef	unless $order_id;

    if ( grep { $_ eq 'webshop' } split(/\s+/, $state->plugins) ) {
	return $keeper->{webshop}->get_orders( id => $order_id, list => 1 );
    }
}

1;