+sub map_data_to_part {
+ my ($self, $part_data) = @_;
+
+ my %map_part_data = (
+ #id => $part_data->{},
+ partnumber => $part_data->{sku},
+ description => $part_data->{name},
+ #listprice => $part_data->{},
+ #sellprice => $part_data->{},
+ #lastcost => $part_data->{},
+ #priceupdate => $part_data->{},
+ #weight => $part_data->{},
+ notes => $part_data->{description},
+ #makemodel => $part_data->{},
+ #rop => $part_data->{},
+ shop => 1,
+ obsolete => 0,
+ #bom => $part_data->{},
+ #image => $part_data->{},
+ #drawing => $part_data->{},
+ #microfiche => $part_data->{},
+ #partsgroup_id => $part_data->{},
+ #ve => $part_data->{},
+ #gv => $part_data->{},
+ #itime => $part_data->{},
+ #mtime => $part_data->{},
+ #unit => $part_data->{},
+ unit => 'Stck',
+ #formel => $part_data->{},
+ #not_discountable => $part_data->{},
+ #buchungsgruppen_id => $part_data->{},
+ #payment_id => $part_data->{},
+ #ean => $part_data->{},
+ #price_factor_id => $part_data->{},
+ #onhand => $part_data->{},
+ #stockable => $part_data->{},
+ #has_sernumber => $part_data->{},
+ #warehouse_id => $part_data->{},
+ #bin_id => $part_data->{},
+ #df_status_aktuell => $part_data->{},
+ #df_status_verlauf => $part_data->{},
+ #active => $part_data->{},
+ #classification_id => $part_data->{},
+ part_type => 'part',
+ );
+ return SL::DB::Part->new(%map_part_data);
+}
+
+sub map_data_to_shop_part {
+ my ($self, $part_data, $part) = @_;
+
+ my @categories = ();
+ foreach my $row_cat ( @{ $part_data->{categories} } ) {
+ my @tmp;
+ push( @tmp,$row_cat->{id} );
+ push( @tmp,$row_cat->{name} );
+ push( @categories,\@tmp );
+ }
+ my %map_shop_part_data = (
+ #id => ,
+ shop_id => $self->config->id,
+ part_id => $part->id,
+ shop_description => $part_data->{description},
+ #itime => ,
+ #mtime => ,
+ #last_update => ,
+ #show_date => ,
+ sortorder => $part_data->{menu_order},
+ #front_page => ,
+ active => 1,
+ shop_category => \@categories,
+ #active_price_source => ,
+ #metatag_keywords => ,
+ #metatag_description => ,
+ #metatag_title => ,
+ #shop_versandhinweis => ,
+ );
+ return SL::DB::ShopPart->new(%map_shop_part_data);
+}
+sub get_shop_parts {
+ my ($self, $partnumber) = @_;
+
+ my $dbh = SL::DB::client;
+ my @errors;
+ my $number_of_parts = 0;
+ my %fetched_parts;
+ my $answer;
+
+ if ($partnumber) {
+ $partnumber = $::form->escape($partnumber);#don't accept / in partnumber
+ $answer = $self->send_request("products/", undef , "get" , "&sku=$partnumber");
+ } else {
+ #TODO
+ $answer = $self->send_request("products/", undef , "get");
+ if ($answer->{total_pages} > 1) {
+ my $current_page = 2;
+ while ($current_page <= $answer->{total_pages}) {
+ my $tmp_answer = $self->send_request("products/", undef , "get", "&page=$current_page");
+ foreach my $part (@{$tmp_answer->{data}}) {
+ push @{$answer->{data}} , $part;
+ }
+ $current_page++;
+ }
+ }
+ }
+
+ if($answer->{success} && scalar @{$answer->{data}}){
+ $dbh->with_transaction( sub{
+ foreach my $part_data (@{$answer->{data}}) {
+ unless (!$part_data->{sku} || SL::DB::Manager::Part->get_all_count( query => [ partnumber => $part_data->{sku} ] )) {
+ my $part = $self->map_data_to_part($part_data);
+ #$main::lxdebug->dump(0, "TST: WooCommerce get_shop_parts part ", $part);
+ $part->save;
+ my $shop_part = $self->map_data_to_shop_part($part_data, $part);
+ #$main::lxdebug->dump(0, "TST: WooCommerce get_shop_parts shop_part ", $shop_part);
+ $shop_part->save;
+ $number_of_parts++;
+ }
+ }
+ return 1;
+ })or do {
+ push @errors,($::locale->text('Saving failed. Error message from the database: #1', $dbh->error));
+ };
+
+ if(@errors){
+ flash_later('error', $::locale->text('Errors: #1', @errors));
+ }
+ %fetched_parts = (
+ shop_id => $self->config->id,
+ shop_description => $self->config->description,
+ number_of_parts => $number_of_parts,
+ );
+ } else {
+ my %error_msg = (
+ shop_id => $self->config->id,
+ shop_description => $self->config->description,
+ message => $answer->{message},
+ error => 1,
+ );
+ %fetched_parts = %error_msg;
+ }
+ return \%fetched_parts;
+}
+