my $result = cancel_lineitem_detail($mgr, $lid_id, $cancel_reason) or
return $e->die_event;
- no_lid_cancel_lineitem($e, $lid_id);
+ no_lid_cancel_lineitem($e, $mgr, $lid_id);
if (not_cancelable($result)) {
$e->rollback;
}
sub no_lid_cancel_lineitem {
- my ($e, $lid_id) = @_;
+ my ($e, $mgr, $lid_id) = @_;
my $lid = $mgr->editor->retrieve_acq_lineitem_detail([
$lid_id, {
"flesh" => 2,
"flesh_fields" => {
"acqlid" => ["lineitem","cancel_reason"],
- "jub" => ["purchase_order"]
+ "jub" => ["purchase_order", "eg_bib_id"]
}
}
]) or return 0;
#Get a count of lineitem details that exist on the lineitem
#that are not cancelled, or lineitem details that are
#cancelled but having keep_debits = true.
- my $query = { "select" => {
- "acqlid" => [
- "lineitem", {
- "column" => "lineitem",
- "transform" => "count",
- "alias" => "lineitem_count",
+
+ my $query = { "select" => {
+ "acqlid" => [
+ "lineitem", {
+ "column" => "lineitem",
+ "transform" => "count",
+ "alias" => "lineitem_count",
"aggregate" => "true"
}]
- },
- "from" => {
- "jub" => {
- "acqlid" => {
- "join" => { "acqcr" => {} }
- }
- }
- },
- "where" => [{
- "+acqlid" => {
- "lineitem" => $lid->lineitem->id,
- "cancel_reason" => null
- }
- }, {
- "purchase_order" => $lid->lineitem->purchase_order
- }, {
- "-or" => [{
- "+acqlid" => {
- "lineitem" => $lid->lineitem->id,
- "cancel_reason" => { "!=" => null }
- }
- }, {
- "+acqcr" => "keep_debits"
- }, {
- "purchase_order" => $lid->lineitem->purchase_order
- }]
- }
- ]
+ }, "from" => {
+ "jub" => {
+ "acqlid" => {
+ "join" => {
+ "acqcr" => {
+ "type" => "left"
+ }
+ }
+ }
+ }
+ },
+ "where" => {
+ "-or" => [{
+ "-and" => {
+ "+acqlid" => { "cancel_reason" => undef },
+ "eg_bib_id" => $lid->lineitem->eg_bib_id,
+ "purchase_order" => $lid->lineitem->purchase_order
+ }}, {
+ "-and" => {
+ "+acqlid" => { "cancel_reason" => { "!=" => undef }},
+ "+acqcr" => "keep_debits",
+ "eg_bib_id" => $lid->lineitem->eg_bib_id,
+ "purchase_order" => $lid->lineitem->purchase_order
+ }
+ }]
+ }
};
my $lineitem_query = $e->json_query($query)