Revision f0ddfbfe
Von Moritz Bunkus vor mehr als 3 Jahren hinzugefügt
SL/Controller/Order.pm | ||
---|---|---|
use SL::DB::Printer;
|
||
use SL::DB::Language;
|
||
use SL::DB::RecordLink;
|
||
use SL::DB::RequirementSpec;
|
||
use SL::DB::Shipto;
|
||
use SL::DB::Translation;
|
||
|
||
... | ... | |
# link records
|
||
if ($::form->{converted_from_oe_id}) {
|
||
my @converted_from_oe_ids = split ' ', $::form->{converted_from_oe_id};
|
||
|
||
foreach my $converted_from_oe_id (@converted_from_oe_ids) {
|
||
my $src = SL::DB::Order->new(id => $converted_from_oe_id)->load;
|
||
$src->update_attributes(closed => 1) if $src->type =~ /_quotation$/;
|
||
... | ... | |
$idx++;
|
||
}
|
||
}
|
||
|
||
$self->link_requirement_specs_linking_to_created_from_objects(@converted_from_oe_ids);
|
||
}
|
||
|
||
$self->save_history('SAVED');
|
||
... | ... | |
return @errors;
|
||
}
|
||
|
||
sub link_requirement_specs_linking_to_created_from_objects {
|
||
my ($self, @converted_from_oe_ids) = @_;
|
||
|
||
return unless @converted_from_oe_ids;
|
||
|
||
my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => \@converted_from_oe_ids ]);
|
||
foreach my $rs_order (@{ $rs_orders }) {
|
||
SL::DB::RequirementSpecOrder->new(
|
||
order_id => $self->order->id,
|
||
requirement_spec_id => $rs_order->requirement_spec_id,
|
||
version_id => $rs_order->version_id,
|
||
)->save;
|
||
}
|
||
}
|
||
|
||
1;
|
||
|
||
__END__
|
SL/OE.pm | ||
---|---|---|
use SL::DB::PeriodicInvoicesConfig;
|
||
use SL::DB::Project;
|
||
use SL::DB::ProjectType;
|
||
use SL::DB::RequirementSpecOrder;
|
||
use SL::DB::Status;
|
||
use SL::DB::Tax;
|
||
use SL::DBUtils;
|
||
... | ... | |
my $number_field = $form->{type} =~ m{order} ? 'ordnumber' : 'quonumber';
|
||
my $trans_number = SL::TransNumber->new(type => $form->{type}, dbh => $dbh, number => $form->{$number_field}, id => $form->{id});
|
||
$form->{$number_field} ||= $trans_number->create_unique; # set $form->{ordnumber} or $form->{quonumber}
|
||
my $is_new = !$form->{id};
|
||
|
||
if ($form->{id}) {
|
||
$query = qq|DELETE FROM custom_variables
|
||
... | ... | |
config_yaml => $form->{periodic_invoices_config})
|
||
if ($form->{type} eq 'sales_order');
|
||
|
||
$self->_link_created_sales_order_to_requirement_specs_for_sales_quotations(
|
||
type => $form->{type},
|
||
converted_from_ids => \@convert_from_oe_ids,
|
||
sales_order_id => $form->{id},
|
||
is_new => $is_new,
|
||
);
|
||
|
||
$main::lxdebug->leave_sub();
|
||
|
||
return 1;
|
||
}
|
||
|
||
sub _link_created_sales_order_to_requirement_specs_for_sales_quotations {
|
||
my ($self, %params) = @_;
|
||
|
||
# If this is a sales order created from a sales quotation and if
|
||
# that sales quotation was created from a requirement spec document
|
||
# then link the newly created sales order to the requirement spec
|
||
# document, too.
|
||
|
||
return if !$params{is_new};
|
||
return if $params{type} ne 'sales_order';
|
||
return if !@{ $params{converted_from_ids} };
|
||
|
||
my $oe_objects = SL::DB::Manager::Order->get_all(where => [ id => $params{converted_from_ids} ]);
|
||
my @sales_quotations = grep { $_->is_type('sales_quotation') } @{ $oe_objects };
|
||
|
||
return if !@sales_quotations;
|
||
|
||
my $rs_orders = SL::DB::Manager::RequirementSpecOrder->get_all(where => [ order_id => [ map { $_->id } @sales_quotations ] ]);
|
||
|
||
return if !@{ $rs_orders };
|
||
|
||
$rs_orders->[0]->db->with_transaction(sub {
|
||
foreach my $rs_order (@{ $rs_orders }) {
|
||
SL::DB::RequirementSpecOrder->new(
|
||
order_id => $params{sales_order_id},
|
||
requirement_spec_id => $rs_order->requirement_spec_id,
|
||
version_id => $rs_order->version_id,
|
||
)->save;
|
||
}
|
||
|
||
1;
|
||
});
|
||
}
|
||
|
||
sub save_periodic_invoices_config {
|
||
my ($self, %params) = @_;
|
||
|
doc/changelog | ||
---|---|---|
vom Auftrag her aufgebaut werden
|
||
- SEPA-Überweisungen & -Bankeinzüge nutzen jetzt aktuelle Standard-Versionen, die
|
||
momentan von der Kreditindustrie unterstützt werden.
|
||
- Pflichtenhefte: wenn man im Workflow vom Pflichtenheft ein neues
|
||
Angebot anlegt und später von diesem Angebot aus einen Auftrag, so
|
||
wird auch der Auftrag direkt mit dem Pflichtenheft verknüpft.
|
||
|
||
Bugfixes (Tracker: https://www.kivitendo.de/redmine):
|
||
|
sql/Pg-upgrade2/link_requirement_spec_to_orders_created_from_quotations_created_from_requirement_spec.sql | ||
---|---|---|
-- @tag: link_requirement_spec_to_orders_created_from_quotations_created_from_requirement_spec
|
||
-- @description: Pflichtenhefte mit Aufträgen verknüpfen, die aus Angeboten erstellt wurden, die wiederum aus einem Pflichtenheft erstellt wurden
|
||
-- @depends: release_3_2_0
|
||
CREATE TEMPORARY TABLE temp_link_requirement_spec_to_orders AS
|
||
SELECT rs_orders.requirement_spec_id, orders.id AS order_id, rs_orders.version_id
|
||
FROM record_links rl,
|
||
requirement_spec_orders rs_orders,
|
||
oe quotations,
|
||
oe orders
|
||
WHERE (rl.from_table = 'oe')
|
||
AND (rl.from_id = quotations.id)
|
||
AND (rl.to_table = 'oe')
|
||
AND (rl.to_id = orders.id)
|
||
AND (rs_orders.order_id = quotations.id)
|
||
AND COALESCE(quotations.quotation, FALSE)
|
||
AND NOT COALESCE(orders.quotation, FALSE)
|
||
AND (quotations.customer_id IS NOT NULL)
|
||
AND (orders.customer_id IS NOT NULL);
|
||
|
||
INSERT INTO requirement_spec_orders (requirement_spec_id, order_id, version_id)
|
||
SELECT requirement_spec_id, order_id, version_id
|
||
FROM temp_link_requirement_spec_to_orders new_orders
|
||
WHERE NOT EXISTS (
|
||
SELECT existing_orders.id
|
||
FROM requirement_spec_orders existing_orders
|
||
WHERE (existing_orders.requirement_spec_id = new_orders.requirement_spec_id)
|
||
AND (existing_orders.order_id = new_orders.order_id)
|
||
LIMIT 1
|
||
);
|
Auch abrufbar als: Unified diff
Pflichtenhefte: bei Pflichtenheft → Angebot → Auftrag auch PH mit Auftrag verknüpfen