--- /dev/null
+package SL::DB::AdditionalBillingAddress;
+
+use strict;
+
+use SL::DB::MetaSetup::AdditionalBillingAddress;
+use SL::DB::Manager::AdditionalBillingAddress;
+
+__PACKAGE__->meta->initialize;
+
+__PACKAGE__->after_save('_after_save_ensure_only_one_marked_as_default_per_customer');
+
+sub _after_save_ensure_only_one_marked_as_default_per_customer {
+ my ($self) = @_;
+
+ if ($self->id && $self->customer_id && $self->default_address) {
+ SL::DB::Manager::AdditionalBillingAddress->update_all(
+ set => { default_address => 0 },
+ where => [
+ customer_id => $self->customer_id,
+ '!id' => $self->id,
+ ],
+ );
+ }
+
+ return 1;
+}
+
+sub displayable_id {
+ my $self = shift;
+ my $text = join('; ', grep { $_ } (map({ $self->$_ } qw(name street)),
+ join(' ', grep { $_ }
+ map { $self->$_ }
+ qw(zipcode city))));
+
+ return $text;
+}
+
+sub used {
+ my ($self) = @_;
+
+ return unless $self->id;
+
+ require SL::DB::Order;
+ require SL::DB::Invoice;
+ require SL::DB::DeliveryOrder;
+
+ my %args = (query => [ billing_address_id => $self->id ]);
+
+ return SL::DB::Manager::Invoice->get_all_count(%args)
+ || SL::DB::Manager::Order->get_all_count(%args)
+ || SL::DB::Manager::DeliveryOrder->get_all_count(%args);
+}
+
+sub detach {
+ $_[0]->customer_id(undef);
+ return $_[0];
+}
+
+1;