Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision c19e3e76

Von Tamino Steinert vor mehr als 1 Jahr hinzugefügt

  • ID c19e3e7642606d473d686872bb95bebf47f0c973
  • Vorgänger 39df5ed9
  • Nachfolger 96809a74

EmailJournal: Basisfunktionalität fürs Verlinken und Neu erstellen von Belegen

Unterschiede anzeigen:

SL/Controller/EmailJournal.pm
use SL::DB::Employee;
use SL::DB::EmailJournal;
use SL::DB::EmailJournalAttachment;
use SL::DB::Order;
use SL::Helper::Flash;
use SL::Locale::String;
use SL::System::TaskServer;
......
__PACKAGE__->run_before('add_stylesheet');
__PACKAGE__->run_before('add_js');
my %RECORD_TYPES_INFO = (
# Order
Order => {
controller => 'Order',
model => 'SL::DB::Order',
types => [
'purchase_order',
'purchase_quotation_intake',
'request_quotation',
'sales_order',
'sales_order_intake',
'sales_quotation',
],
},
);
my %RECORD_TYPE_TO_CONTROLLER =
map {
my $controller = $RECORD_TYPES_INFO{$_}->{controller};
map { $_ => $controller } @{ $RECORD_TYPES_INFO{$_}->{types} }
} keys %RECORD_TYPES_INFO;
my %RECORD_TYPE_TO_MODEL =
map {
my $model = $RECORD_TYPES_INFO{$_}->{model};
map { $_ => $model } @{ $RECORD_TYPES_INFO{$_}->{types} }
} keys %RECORD_TYPES_INFO;
#
# actions
#
......
$self->setup_show_action_bar;
$self->render('email_journal/show',
title => $::locale->text('View sent email'),
title => $::locale->text('View email'),
back_to => $back_to);
}
......
$self->send_file($ref, name => $attachment->name, type => $attachment->mime_type);
}
sub action_apply_record_action {
my ($self) = @_;
my $email_journal_id = $::form->{email_journal_id};
my $attachment_id = $::form->{attachment_id};
my $record_action = $::form->{record_action};
my $vendor_id = $::form->{vendor_id};
my $customer_id = $::form->{customer_id};
if ( $record_action =~ s/^link_// ) { # remove prefix
# Load record
my $record_type = $record_action;
my $record_id = $::form->{$record_type . "_id"};
my $record_type_model = $RECORD_TYPE_TO_MODEL{$record_type};
my $record = $record_type_model->new(id => $record_id)->load;
my $email_journal = SL::DB::EmailJournal->new(id => $email_journal_id)->load;
if ($attachment_id) {
my $attachment = SL::DB::EmailJournalAttachment->new(id => $attachment_id)->load;
$attachment->add_file_to_record($record);
}
$email_journal->link_to_record($record);
return $self->js->flash('info', $::locale->text('Linked to e-mail ') . $record->displayable_name)->render();
}
my %additional_params = ();
if ( $record_action =~ s/^customer_// ) { # remove prefix
$additional_params{customer_id} = $customer_id;
} elsif ( $record_action =~ s/^vendor_// ) { # remove prefix
$additional_params{vendor_id} = $vendor_id;
}
$additional_params{type} = $record_action;
$additional_params{controller} = $RECORD_TYPE_TO_CONTROLLER{$record_action};
$self->redirect_to(
action => 'add',
email_journal_id => $email_journal_id,
attachment_id => $attachment_id,
%additional_params,
);
}
sub action_update_attachment_preview {
my ($self) = @_;
$::auth->assert('email_journal');
......
->replaceWith('#attachment_preview',
SL::Presenter::EmailJournal::attachment_preview(
$attachment,
style => "width:489px;border:1px solid black;margin:9px"
style => "width:655px;border:1px solid black;margin:9px"
)
)
->render();
......
# helpers
#
sub find_cv_from_email {
my ($self, $cv_type, $email_journal) = @_;
my $email_address = $email_journal->from;
# search for customer or vendor or both
my $customer;
my $vendor;
if ($cv_type ne 'vendor') {
$customer = SL::DB::Manager::Customer->get_first(
where => [
or => [
email => $email_address,
cc => $email_address,
bcc => $email_address,
'contacts.cp_email' => $email_address,
'contacts.cp_privatemail' => $email_address,
'shipto.shiptoemail' => $email_address,
],
],
with_objects => [ 'contacts', 'shipto' ],
);
} elsif ($cv_type ne 'customer') {
$vendor = SL::DB::Manager::Vendor->get_first(
where => [
or => [
email => $email_address,
cc => $email_address,
bcc => $email_address,
'contacts.cp_email' => $email_address,
'contacts.cp_privatemail' => $email_address,
'shipto.shiptoemail' => $email_address,
],
],
with_objects => [ 'contacts', 'shipto' ],
);
}
return $customer || $vendor;
}
sub find_customer_from_email {
my ($self, $email_journal) = @_;
my $email_address = $email_journal->from;
my $customer = SL::DB::Manager::Customer->get_first(
where => [
or => [
email => $email_address,
cc => $email_address,
bcc => $email_address,
'contacts.cp_email' => $email_address,
'contacts.cp_privatemail' => $email_address,
'shipto.shiptoemail' => $email_address,
],
],
with_objects => [ 'contacts', 'shipto' ],
);
return $customer;
}
sub add_js {
$::request->{layout}->use_javascript("${_}.js") for qw(
kivi.EmailJournal

Auch abrufbar als: Unified diff