Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 9ae85179

Von Werner Hahn vor mehr als 7 Jahren hinzugefügt

  • ID 9ae851793af66c2fef859e69d6734b0b2aa58c24
  • Vorgänger 856a3b09
  • Nachfolger 5d5a694a

WebshopApi: BackgroundJob ShopOrderMassTransfer

Unterschiede anzeigen:

SL/BackgroundJob/ShopOrderMassTransfer.pm
package SL::BackgroundJob::ShopOrderMassTransfer;
use strict;
use warnings;
use parent qw(SL::BackgroundJob::Base);
use SL::DBUtils;
use SL::DB::ShopOrder;
use SL::DB::ShopOrderItem;
use SL::DB::Order;
use SL::DB::History;
use SL::DB::DeliveryOrder;
use SL::DB::Inventory;
use Sort::Naturally ();
use SL::Locale::String qw(t8);
use constant WAITING_FOR_EXECUTION => 0;
use constant CONVERTING_TO_ORDER => 1;
use constant DONE => 2;
# Data format:
# my $data = {
# shop_order_record_ids => [ 603, 604, 605],
# num_order_created => 0,
# orders_ids => [1,2,3]
# conversion_errors => [ { id => 603 , item => 2, message => "Out of stock"}, ],
# };
#
sub create_order {
my ( $self ) = @_;
my $job_obj = $self->{job_obj};
my $db = $job_obj->db;
$job_obj->set_data(CONVERTING_TO_ORDER())->save;
my $data = $job_obj->data_as_hash;
foreach my $shop_order_id (@{ $data->{shop_order_record_ids} }) {
my $shop_order = SL::DB::ShopOrder->new(id => $shop_order_id)->load;
unless($shop_order){
push @{ $data->{conversion_errors} }, { id => $shop_order->id, number => $shop_order->shop_ordernumber, message => t8('Shoporder not found') };
$job_obj->update_attributes(data_as_hash => $data);
}
my $customer = SL::DB::Manager::Customer->find_by(id => $shop_order->{kivi_customer_id});
unless($customer){
push @{ $data->{conversion_errors} }, { id => $shop_order->id, number => $shop_order->shop_ordernumber, message => t8('Customer not found') };
$job_obj->update_attributes(data_as_hash => $data);
}
my $employee = SL::DB::Manager::Employee->current;
my $items = SL::DB::Manager::ShopOrderItem->get_all( where => [shop_order_id => $shop_order_id], );
if ($customer->{order_lock} == 0) {
$shop_order->{shop_order_items} = $items;
$db->with_transaction( sub {
my $order = $shop_order->convert_to_sales_order(customer => $customer, employee => $employee);
if ($order->{error}){
push @{ $data->{conversion_errors} }, { id => $shop_order->id, number => $shop_order->shop_ordernumber, message => \@{$order->{errors}} };
$job_obj->update_attributes(data_as_hash => $data);
}else{
$order->save;
$order->calculate_prices_and_taxes;
my $snumbers = "ordernumber_" . $order->ordnumber;
SL::DB::History->new(
trans_id => $order->id,
snumbers => $snumbers,
employee_id => SL::DB::Manager::Employee->current->id,
addition => 'SAVED',
what_done => 'Shopimport->Order(MassTransfer)',
)->save();
$shop_order->transferred(1);
$shop_order->transfer_date(DateTime->now_local);
$shop_order->save;
$shop_order->link_to_record($order);
$data->{num_order_created} ++;
push @{ $data->{orders_ids} }, $order->id;
push @{ $data->{shop_orders_ids} }, $shop_order->id;
$job_obj->update_attributes(data_as_hash => $data);
}
1;
})or do {
push @{ $data->{conversion_errors} }, { id => $shop_order->id, number => $shop_order->shop_ordernumber, message => $@ };
$job_obj->update_attributes(data_as_hash => $data);
}
}else{
push @{ $data->{conversion_errors} }, { id => $shop_order->id, number => $shop_order->shop_ordernumber, message => t8('Customerorderlock') };
$job_obj->update_attributes(data_as_hash => $data);
}
}
}
sub run {
my ($self, $job_obj) = @_;
$self->{job_obj} = $job_obj;
$self->create_order;
$job_obj->set_data(status => DONE())->save;
return 1;
}
1;

Auch abrufbar als: Unified diff