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