$item->pricePerUnit = $invoice->sum; $item->units = 1; $item->description = $deliverable->title . ' (auto-generated)'; $item->create(); } else { $found = false; foreach ($items as $item) { if ($item->deliverable == $deliverable->id) { echo "Found invoice item for deliverable " . $deliverable->title . "\n"; flush(); $found = true; break; } } if (!$found) { $cycle_number = (int) $invoice->get_parameter('org.openpsa.sales', 'cycle_number'); $description = $deliverable->title; if ($cycle_number) { $description .= ' ' . $cycle_number; } foreach ($items as $item) { if ($item->description == $description && $item->deliverable == 0) { echo "Found invoice item for deliverable " . $deliverable->title . " by description\n"; flush(); $found = true; break; } } } if (!$found) { echo "Could not identify invoice item for deliverable " . $deliverable->title . " on invoice " . $invoice->get_label() . ", creating empty item\n";