]> git.imager.perl.org - bse.git/blame - site/cgi-bin/modules/BSE/ImportTargetProduct.pm
make the order iterators available on the show_opts page
[bse.git] / site / cgi-bin / modules / BSE / ImportTargetProduct.pm
CommitLineData
3709451d
TC
1package BSE::ImportTargetProduct;
2use strict;
3use base 'BSE::ImportTargetArticle';
4use BSE::API qw(bse_make_product bse_make_catalog bse_add_image);
5use Articles;
6use Products;
0cca6ce6
TC
7use BSE::TB::ProductOptions;
8use BSE::TB::ProductOptionValues;
3709451d
TC
9
10sub new {
11 my ($class, %opts) = @_;
12
13 my $self = $class->SUPER::new(%opts);
14
15 my $importer = delete $opts{importer};
16
17 $self->{price_dollar} = $importer->cfg_entry('price_dollar', 0);
18 $self->{product_template} = $importer->cfg_entry('product_template');
19 $self->{catalog_template} = $importer->cfg_entry('catalog_template');
0cca6ce6
TC
20 $self->{prodopt_value_sep} = $importer->cfg_entry("prodopt_separator", "|");
21 $self->{reset_prodopts} = $importer->cfg_entry("reset_prodopts", 1);
3709451d 22
0cca6ce6 23 my $map = $importer->maps;
3709451d
TC
24 defined $map->{retailPrice}
25 or die "No retailPrice mapping found\n";
26
27 return $self;
28}
29
30sub xform_entry {
31 my ($self, $importer, $entry) = @_;
32
33 $self->SUPER::xform_entry($importer, $entry);
34
35 if ($self->{use_codes}) {
36 $entry->{product_code} =~ /\S/
37 or die "product_code blank with use_codes\n";
38 }
39 $entry->{retailPrice} =~ s/\$//; # in case
40
41 if ($entry->{retailPrice} =~ /\d/) {
42 $self->{price_dollar}
43 and $entry->{retailPrice} *= 100;
44 }
45 else {
46 $importer->warn("Warning: no price");
47 $entry->{retailPrice} = 0;
48 }
49}
50
51sub children_of {
52 my ($self, $parent) = @_;
53
54 return grep $_->{generator} eq 'Generate::Catalog',
55 Articles->children($parent);
56}
57
58sub make_parent {
59 my ($self, $importer, %entry) = @_;
60
3709451d
TC
61 return bse_make_catalog(%entry);
62}
63
64sub find_leaf {
65 my ($self, $leaf_id) = @_;
66
0cca6ce6 67 my ($leaf) = Products->getBy($self->{code_field}, $leaf_id)
3709451d
TC
68 or return;
69
0cca6ce6
TC
70 if ($self->{reset_prodopts}) {
71 my @options = $leaf->db_options;
72 for my $option (@options) {
73 $option->remove;
74 }
75 }
76
3709451d
TC
77 return $leaf;
78}
79
80sub make_leaf {
81 my ($self, $importer, %entry) = @_;
82
3709451d
TC
83 return bse_make_product(%entry);
84}
85
0cca6ce6
TC
86sub fill_leaf {
87 my ($self, $importer, $leaf, %entry) = @_;
3709451d 88
0cca6ce6
TC
89 my $ordering = time;
90 for my $opt_num (1 .. 5) {
91 my $name = $entry{"prodopt${opt_num}_name"};
92 my $values = $entry{"prodopt${opt_num}_values"};
3709451d 93
0cca6ce6
TC
94 defined $name && $name =~ /\S/ && $values =~ /\S/
95 or next;
96 my @values = split /\Q$self->{prodopt_value_sep}/, $values
3709451d 97 or next;
3709451d 98
0cca6ce6 99 my $option = BSE::TB::ProductOptions->make
3709451d 100 (
0cca6ce6
TC
101 product_id => $leaf->id,
102 name => $name,
103 display_order => $ordering++,
3709451d 104 );
3709451d 105
0cca6ce6
TC
106 for my $value (@values) {
107 my $entry = BSE::TB::ProductOptionValues->make
108 (
109 product_option_id => $option->id,
110 value => $value,
111 display_order => $ordering++,
112 );
113 }
3709451d 114 }
0cca6ce6 115 return $self->SUPER::fill_leaf($importer, $leaf, %entry);
3709451d
TC
116}
117
118sub default_parent { 3 }
119
120sub default_code_field { "product_code" }
121
1221;