Revision f53d3f74
Von Jan Büren vor 10 Monaten hinzugefügt
SL/Controller/Order.pm | ||
---|---|---|
|
||
use SL::Helper::Flash qw(flash flash_later);
|
||
use SL::HTML::Util;
|
||
use SL::KIX18Client;
|
||
use SL::Presenter::Tag qw(select_tag hidden_tag div_tag);
|
||
use SL::Locale::String qw(t8);
|
||
use SL::SessionFile::Random;
|
||
... | ... | |
my @order_locked_positions = map { $_->position } grep { $_->part->order_locked } @{ $self->order->items_sorted };
|
||
die t8('This record contains not orderable items at position #1', join ', ', @order_locked_positions) if @order_locked_positions;
|
||
}
|
||
$self->create_kix18_ticket if ( $::instance_conf->get_kix18 && $self->type eq SALES_ORDER_TYPE()
|
||
&& $is_new && !$::form->{transaction_description} );
|
||
|
||
SL::Helper::KIX18->create_kix18_ticket('foo', order => $self->order) if ( $::instance_conf->get_kix18 && $self->type eq SALES_ORDER_TYPE()
|
||
&& $is_new && !$::form->{transaction_description} );
|
||
|
||
# create first version if none exists
|
||
$self->order->add_order_version(SL::DB::OrderVersion->new(version => 1)) if !$self->order->order_version;
|
||
... | ... | |
link_requirement_specs_linking_to_created_from_objects => \@converted_from_oe_ids,
|
||
set_project_in_linked_requirement_specs => 1,
|
||
);
|
||
$self->create_kix18_article if ( $::instance_conf->get_kix18 && $self->type eq SALES_ORDER_TYPE()
|
||
&& $is_new && $self->order->ticket_id );
|
||
SL::Helper::KIX18->create_kix18_article('foo', order => $self->order) if ( $::instance_conf->get_kix18 && $self->type eq SALES_ORDER_TYPE()
|
||
&& $is_new && $self->order->ticket_id );
|
||
|
||
|
||
if ($::form->{email_journal_id}) {
|
||
... | ... | |
return @errors;
|
||
}
|
||
|
||
sub create_kix18_ticket {
|
||
my ($self) = @_;
|
||
|
||
try {
|
||
# create new ticket
|
||
my $customer_name = $self->order->customer->name;
|
||
my $title = t8("Order for #1", $customer_name);
|
||
$self->{kix18_client} //= SL::KIX18Client->new();
|
||
my $id = $self->{kix18_client}->create_ticket(Title => $title);
|
||
my $ticket = $self->{kix18_client}->get_ticket(ticket_id => $id);
|
||
die "Invalid ticket number" unless $ticket->{Ticket}{TicketNumber};
|
||
|
||
$self->order->transaction_description($ticket->{Ticket}{TicketNumber});
|
||
$self->order->ticket_id($id);
|
||
$self->order->order_status_id(SL::DB::Manager::OrderStatus->find_by(name => 'Ticket offen')->id);
|
||
|
||
flash_later('info', t8("Ticket with ID #1 created.", $ticket->{Ticket}{TicketNumber}));
|
||
|
||
} catch { die t8("Communication error KIX18: #1", $_ ) };
|
||
}
|
||
|
||
sub create_kix18_article {
|
||
my ($self) = @_;
|
||
my $customer_name = $self->order->customer->name;
|
||
my $title = t8("Order for #1", $customer_name);
|
||
my $note = '<b>' . t8("Details:") . '</b>' . "<br>";
|
||
foreach my $item (@{ $self->order->items }) {
|
||
$title .= " " . $item->description;
|
||
$note .= $item->qty . " " . $item->unit . " " . $item->description . "<br>";
|
||
}
|
||
if ($::lx_office_conf{kix18}->{kivi_order_url}) {
|
||
my $id = $self->order->id;
|
||
my $link = $::lx_office_conf{kix18}->{kivi_order_url} =~ s/<%order_id%>/$id/r;
|
||
$note .= t8('kivitendo Sales Order') . ': <a href="' . $link . '">' . $self->order->ordnumber . '</a>';
|
||
}
|
||
try {
|
||
# create article for Ticket
|
||
#$self->{kix18_client} //= SL::KIX18Client->new();
|
||
$self->{kix18_client}->create_article(Subject => $title, Body => $note, TicketID => $self->order->ticket_id);
|
||
|
||
} catch { die t8("Communication error KIX18: #1", $_ ) };
|
||
}
|
||
|
||
sub init_type_data {
|
||
my ($self) = @_;
|
||
SL::DB::Helper::TypeDataProxy->new('SL::DB::Order', $self->order->record_type);
|
SL/Controller/ShopOrder.pm | ||
---|---|---|
$self->redirect_to(controller => "ShopOrder", action => 'show', id => $self->shop_order->id);
|
||
}else{
|
||
$order->db->with_transaction( sub {
|
||
|
||
SL::Helper::KIX18->create_kix18_ticket('foo', order => $order) if ($::instance_conf->get_kix18);
|
||
|
||
$order->calculate_prices_and_taxes;
|
||
$order->save;
|
||
|
||
SL::Helper::KIX18->create_kix18_article('foo', order => $order) if ($::instance_conf->get_kix18);
|
||
|
||
SL::DB::OrderVersion->new(oe_id => $order->id, version => 1)->save;
|
||
|
||
my $snumbers = "ordernumber_" . $order->ordnumber;
|
SL/Helper/KIX18.pm | ||
---|---|---|
package SL::Helper::KIX18;
|
||
|
||
use strict;
|
||
use warnings;
|
||
|
||
use SL::KIX18Client;
|
||
use SL::Locale::String qw(t8);
|
||
use SL::Helper::Flash qw(flash_later);
|
||
|
||
use Try::Tiny;
|
||
|
||
|
||
use Exporter 'import';
|
||
our @EXPORT_OK = qw(create_kix18_ticket create_kix18_article);
|
||
our %EXPORT_TAGS = (all => \@EXPORT_OK,);
|
||
|
||
|
||
sub create_kix18_ticket {
|
||
my ($self) = @_;
|
||
my %params = @_;
|
||
|
||
die "Need a valid order object!" unless ref $params{order} eq 'SL::DB::Order';
|
||
my $order = delete $params{order};
|
||
try {
|
||
# create new ticket
|
||
my $customer_name = $order->customer->name;
|
||
my $title = t8("Order for #1", $customer_name);
|
||
$order->{kix18_client} //= SL::KIX18Client->new();
|
||
my $id = $order->{kix18_client}->create_ticket(Title => $title);
|
||
my $ticket = $order->{kix18_client}->get_ticket(ticket_id => $id);
|
||
die "Invalid ticket number" unless $ticket->{Ticket}{TicketNumber};
|
||
|
||
$order->transaction_description($ticket->{Ticket}{TicketNumber});
|
||
$order->ticket_id($id);
|
||
$order->order_status_id(SL::DB::Manager::OrderStatus->find_by(name => 'Ticket offen')->id);
|
||
|
||
flash_later('info', t8("Ticket with ID #1 created.", $ticket->{Ticket}{TicketNumber}));
|
||
|
||
} catch { die t8("Communication error KIX18: #1", $_ ) };
|
||
}
|
||
|
||
sub create_kix18_article {
|
||
my ($self) = @_;
|
||
my %params = @_;
|
||
|
||
die "Need a valid order object!" unless ref $params{order} eq 'SL::DB::Order';
|
||
my $order = delete $params{order};
|
||
my $customer_name = $order->customer->name;
|
||
my $title = t8("Order for #1", $customer_name);
|
||
my $note = '<b>' . t8("Details:") . '</b>' . "<br>";
|
||
foreach my $item (@{ $order->items }) {
|
||
$title .= " " . $item->description;
|
||
$note .= $item->qty . " " . $item->unit . " " . $item->description . "<br>";
|
||
}
|
||
if ($::lx_office_conf{kix18}->{kivi_order_url}) {
|
||
my $id = $order->id;
|
||
my $link = $::lx_office_conf{kix18}->{kivi_order_url} =~ s/<%order_id%>/$id/r;
|
||
$note .= t8('kivitendo Sales Order') . ': <a href="' . $link . '">' . $order->ordnumber . '</a>';
|
||
}
|
||
try {
|
||
# create article for Ticket
|
||
$order->{kix18_client} //= SL::KIX18Client->new();
|
||
$order->{kix18_client}->create_article(Subject => $title, Body => $note, TicketID => $order->ticket_id);
|
||
|
||
} catch { die t8("Communication error KIX18: #1", $_ ) };
|
||
}
|
||
|
||
1;
|
||
|
||
|
Auch abrufbar als: Unified diff
kix18: create_ticket* ausgelagert in SL/H/KIX18 und bei ShopOrder ergänzt