X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FShopConnector%2FShopware.pm;h=97571609f63a95f423dfab929c82064f0ac0ac16;hb=841762994976f7cdbdf1ab5c4bdcbf9daf8230e1;hp=9cd766e90716f861ca41793297518509df70fcdd;hpb=86d70efe93c53445626d8fd1e052f96c7c762cf6;p=kivitendo-erp.git diff --git a/SL/ShopConnector/Shopware.pm b/SL/ShopConnector/Shopware.pm index 9cd766e90..97571609f 100644 --- a/SL/ShopConnector/Shopware.pm +++ b/SL/ShopConnector/Shopware.pm @@ -11,6 +11,7 @@ use LWP::Authen::Digest; use SL::DB::ShopOrder; use SL::DB::ShopOrderItem; use SL::DB::History; +use SL::DB::PaymentTerm; use DateTime::Format::Strptime; use SL::DB::File; use Data::Dumper; @@ -46,6 +47,7 @@ sub get_one_order { }; if(!@errors){ + $self->set_orderstatus($import->{data}->{id}, "fetched"); $of++; }else{ flash_later('error', $::locale->text('Database errors: #1', @errors)); @@ -71,7 +73,7 @@ sub get_new_orders { my $last_order_number = $self->config->last_order_number; my $otf = $self->config->orders_to_fetch; my $of = 0; - my $last_data = $self->connector->get($url . "api orders/$last_order_number?useNumberAsId=true"); + my $last_data = $self->connector->get($url . "api/orders/$last_order_number?useNumberAsId=true"); my $last_data_json = $last_data->content; my $last_import = SL::JSON::decode_json($last_data_json); @@ -100,6 +102,7 @@ sub get_new_orders { }; if(!@errors){ + $self->set_orderstatus($shoporder->{id}, "fetched"); $of++; }else{ flash_later('error', $::locale->text('Database errors: #1', @errors)); @@ -149,6 +152,20 @@ sub import_data_to_shop_order { } $shop_order->positions($position-1); + if ( $self->config->shipping_costs_parts_id ) { + my $shipping_part = SL::DB::Part->find_by( id => $self->config->shipping_costs_parts_id); + my %shipping_pos = ( description => $import->{data}->{dispatch}->{name}, + partnumber => $shipping_part->partnumber, + price => $import->{data}->{invoiceShipping}, + quantity => 1, + position => $position, + shop_trans_id => 0, + shop_order_id => $id, + ); + my $shipping_pos_insert = SL::DB::ShopOrderItem->new(%shipping_pos); + $shipping_pos_insert->save; + } + my $customer = $shop_order->get_customer; if(ref($customer)){ @@ -169,6 +186,11 @@ sub map_data_to_shoporder { my $shop_id = $self->config->id; my $tax_included = $self->config->pricetype; + # Mapping Zahlungsmethoden muss an Firmenkonfiguration angepasst werden + my %payment_ids_methods = ( + # shopware_paymentId => kivitendo_payment_id + ); + my $default_payment_id = SL::DB::Manager::PaymentTerm->get_first()->id || undef; # Mapping to table shoporders. See http://community.shopware.com/_detail_1690.html#GET_.28Liste.29 my %columns = ( amount => $import->{data}->{invoiceAmount}, @@ -216,7 +238,7 @@ sub map_data_to_shoporder { netamount => $import->{data}->{invoiceAmountNet}, order_date => $orderdate, payment_description => $import->{data}->{payment}->{description}, - payment_id => $import->{data}->{paymentId}, + payment_id => $payment_ids_methods{$import->{data}->{paymentId}} || $default_payment_id, remote_ip => $import->{data}->{remoteAddress}, sepa_account_holder => $import->{data}->{paymentIntances}->{accountHolder}, sepa_bic => $import->{data}->{paymentIntances}->{bic}, @@ -249,13 +271,22 @@ sub get_categories { my @daten = @{$import->{data}}; my %categories = map { ($_->{id} => $_) } @daten; + my @categories_tree; for(@daten) { + # ignore root with id=1 + if( $_->{id} == 1) { + next; + } my $parent = $categories{$_->{parentId}}; - $parent->{children} ||= []; - push @{$parent->{children}},$_; + if($parent && $parent->{id} != 1) { + $parent->{children} ||= []; + push @{$parent->{children}},$_; + } else { + push @categories_tree, $_; + } } - return \@daten; + return \@categories_tree; } sub get_version { @@ -391,7 +422,7 @@ sub update_part { return $upload_content->{success}; } -sub get_article { +sub get_parts_info { my ($self,$partnumber) = @_; my $url = $self->url; @@ -401,6 +432,15 @@ sub get_article { return SL::JSON::decode_json($data_json); } +sub set_orderstatus { + my ($self,$order_id, $status) = @_; + if ($status eq "fetched") { $status = 1; } + if ($status eq "completed") { $status = 2; } + my %new_status = (orderStatusId => $status); + my $new_status_json = SL::JSON::to_json(\%new_status); + $self->connector->put($self->url . "api/orders/$order_id", Content => $new_status_json); +} + sub init_url { my ($self) = @_; $self->url($self->config->protocol . "://" . $self->config->server . ":" . $self->config->port . $self->config->path);