365 |
365 |
}
|
366 |
366 |
}) || die($db->error);
|
367 |
367 |
|
368 |
|
$self->{contact} = SL::DB::Contact->new();
|
|
368 |
$self->{contact} = $self->_new_contact_object;
|
369 |
369 |
}
|
370 |
370 |
|
371 |
371 |
$self->action_edit();
|
... | ... | |
679 |
679 |
$self->{cv} = SL::DB::Customer->new(id => $::form->{cv}->{id})->load();
|
680 |
680 |
}
|
681 |
681 |
} else {
|
682 |
|
if ( $self->is_vendor() ) {
|
683 |
|
$self->{cv} = SL::DB::Vendor->new();
|
684 |
|
} else {
|
685 |
|
$self->{cv} = SL::DB::Customer->new();
|
686 |
|
}
|
|
682 |
$self->{cv} = $self->_new_customer_vendor_object;
|
687 |
683 |
}
|
688 |
684 |
$self->{cv}->assign_attributes(%{$::form->{cv}});
|
689 |
685 |
|
... | ... | |
735 |
731 |
if ( $::form->{contact}->{cp_id} ) {
|
736 |
732 |
$self->{contact} = SL::DB::Contact->new(cp_id => $::form->{contact}->{cp_id})->load();
|
737 |
733 |
} else {
|
738 |
|
$self->{contact} = SL::DB::Contact->new();
|
|
734 |
$self->{contact} = $self->_new_contact_object;
|
739 |
735 |
}
|
740 |
736 |
$self->{contact}->assign_attributes(%{$::form->{contact}});
|
741 |
737 |
|
... | ... | |
786 |
782 |
die($::locale->text('Error'));
|
787 |
783 |
}
|
788 |
784 |
} else {
|
789 |
|
$self->{contact} = SL::DB::Contact->new();
|
|
785 |
$self->{contact} = $self->_new_contact_object;
|
790 |
786 |
}
|
791 |
787 |
}
|
792 |
788 |
|
793 |
789 |
sub _create_customer_vendor {
|
794 |
790 |
my ($self) = @_;
|
795 |
791 |
|
796 |
|
if ( $self->is_vendor() ) {
|
797 |
|
$self->{cv} = SL::DB::Vendor->new();
|
798 |
|
} else {
|
799 |
|
$self->{cv} = SL::DB::Customer->new();
|
800 |
|
}
|
|
792 |
$self->{cv} = $self->_new_customer_vendor_object;
|
801 |
793 |
$self->{cv}->currency_id($::instance_conf->get_currency_id());
|
802 |
794 |
|
803 |
795 |
$self->{note} = SL::DB::Note->new();
|
... | ... | |
806 |
798 |
|
807 |
799 |
$self->{shipto} = SL::DB::Shipto->new();
|
808 |
800 |
|
809 |
|
$self->{contact} = SL::DB::Contact->new();
|
|
801 |
$self->{contact} = $self->_new_contact_object;
|
810 |
802 |
}
|
811 |
803 |
|
812 |
804 |
sub _pre_render {
|
... | ... | |
970 |
962 |
);
|
971 |
963 |
}
|
972 |
964 |
|
|
965 |
sub _new_customer_vendor_object {
|
|
966 |
my ($self) = @_;
|
|
967 |
|
|
968 |
my $class = 'SL::DB::' . ($self->is_vendor ? 'Vendor' : 'Customer');
|
|
969 |
return $class->new(
|
|
970 |
contacts => [],
|
|
971 |
shipto => [],
|
|
972 |
custom_variables => [],
|
|
973 |
);
|
|
974 |
}
|
|
975 |
|
|
976 |
sub _new_contact_object {
|
|
977 |
my ($self) = @_;
|
|
978 |
|
|
979 |
return SL::DB::Contact->new(custom_variables => []);
|
|
980 |
}
|
|
981 |
|
973 |
982 |
1;
|
CustomerVendor-Controller: Daten in Neu-Anzeige bei Fehler beibehalten
RDBO hat das Verhalten, dass bei einem neuen, noch nicht gespeicherten
Objekt die Methoden zum Hinzufügen von Relationship-Objekten (z.B. in
1:n-Beziehnungen wie $customer->add_contacts(…)) beim danach erfolgenden
Auslesen der Beziehung nicht zurückliefert. Das heißt, dass Folgendes
der Fall ist:
my $customer = SL::DB::Customer->new;
$customer->add_contacts(SL::DB::Contacts->new);
print scalar(@{ $customer->contacts || [] }); # Das hier gibt 0 aus
Existiert das Objekt hingegen schon, dann klappt das normal. Das Problem
kann man umgehen, indem man beim Anlegen des neuen Objektes die
Beziehungen explizit auf eine leere Array-Referenz setzt, damit der in
RDBO enthaltene Check an der Stelle greift.
Das betrifft den Workflow, wenn man Daten in den benutzerdefinierten
Variablen eingibt, auf Speichern drückt und kivitendo dann wegen eines
fehlgeschlagenen Checks die Maske erneut anzeigt.