- $self->{"shipto$item"} =~ s/\'/\'\'/g;
- }
-
- if ($shipto) {
- if ($self->{shipto_id}) {
- my $query = qq| UPDATE shipto set
- shiptoname = '$self->{shiptoname}',
- shiptodepartment_1 = '$self->{shiptodepartment_1}',
- shiptodepartment_2 = '$self->{shiptodepartment_2}',
- shiptostreet = '$self->{shiptostreet}',
- shiptozipcode = '$self->{shiptozipcode}',
- shiptocity = '$self->{shiptocity}',
- shiptocountry = '$self->{shiptocountry}',
- shiptocontact = '$self->{shiptocontact}',
- shiptophone = '$self->{shiptophone}',
- shiptofax = '$self->{shiptofax}',
- shiptoemail = '$self->{shiptoemail}'
- WHERE id = $self->{shipto_id}|;
- $dbh->do($query) || $self->dberror($query);
- } else {
- my $query =
- qq|INSERT INTO shipto (trans_id, shiptoname, shiptodepartment_1, shiptodepartment_2, shiptostreet,
- shiptozipcode, shiptocity, shiptocountry, shiptocontact,
- shiptophone, shiptofax, shiptoemail, module) VALUES ($id,
- '$self->{shiptoname}', '$self->{shiptodepartment_1}', '$self->{shiptodepartment_2}', '$self->{shiptostreet}',
- '$self->{shiptozipcode}', '$self->{shiptocity}',
- '$self->{shiptocountry}', '$self->{shiptocontact}',
- '$self->{shiptophone}', '$self->{shiptofax}',
- '$self->{shiptoemail}', '$module')|;
- $dbh->do($query) || $self->dberror($query);
+ push(@values, $self->{"shipto${item}"});
+ }
+
+ return if !$shipto;
+
+ # shiptocp_gender only makes sense, if any other shipto attribute is set.
+ # Because shiptocp_gender is set to 'm' by default in forms
+ # it must not be considered above to decide if shiptos has to be added or
+ # updated, but must be inserted or updated as well in case.
+ push(@values, $self->{shiptocp_gender});
+
+ my $shipto_id = $self->{shipto_id};
+
+ if ($self->{shipto_id}) {
+ my $query = qq|UPDATE shipto set
+ shiptoname = ?,
+ shiptodepartment_1 = ?,
+ shiptodepartment_2 = ?,
+ shiptostreet = ?,
+ shiptozipcode = ?,
+ shiptocity = ?,
+ shiptocountry = ?,
+ shiptogln = ?,
+ shiptocontact = ?,
+ shiptophone = ?,
+ shiptofax = ?,
+ shiptoemail = ?
+ shiptocp_gender = ?,
+ WHERE shipto_id = ?|;
+ do_query($self, $dbh, $query, @values, $self->{shipto_id});
+ } else {
+ my $query = qq|SELECT * FROM shipto
+ WHERE shiptoname = ? AND
+ shiptodepartment_1 = ? AND
+ shiptodepartment_2 = ? AND
+ shiptostreet = ? AND
+ shiptozipcode = ? AND
+ shiptocity = ? AND
+ shiptocountry = ? AND
+ shiptogln = ? AND
+ shiptocontact = ? AND
+ shiptophone = ? AND
+ shiptofax = ? AND
+ shiptoemail = ? AND
+ shiptocp_gender = ? AND
+ module = ? AND
+ trans_id = ?|;
+ my $insert_check = selectfirst_hashref_query($self, $dbh, $query, @values, $module, $id);
+ if(!$insert_check){
+ my $insert_query =
+ qq|INSERT INTO shipto (trans_id, shiptoname, shiptodepartment_1, shiptodepartment_2,
+ shiptostreet, shiptozipcode, shiptocity, shiptocountry, shiptogln,
+ shiptocontact, shiptophone, shiptofax, shiptoemail, shiptocp_gender, module)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|;
+ do_query($self, $dbh, $insert_query, $id, @values, $module);
+
+ $insert_check = selectfirst_hashref_query($self, $dbh, $query, @values, $module, $id);