"Copy requirement spec":"Pflichtenheft kopieren",
"Copy template":"Vorlage kopieren",
"Create PDF":"PDF erzeugen",
+"Create new qutoation/order":"",
"Create new version":"Neue Version anlegen",
"Database Connection Test":"Test der Datenbankverbindung",
"Delete":"Löschen",
+"Delete quotation/order":"",
"Delete requirement spec":"Pflichtenheft löschen",
"Delete template":"Vorlage löschen",
"Delete text block":"Textblock löschen",
"Do you really want to revert to this version?":"Wollen Sie wirklich auf diese Version zurücksetzen?",
"Do you want to set the account number \"#1\" to \"#2\" and the name \"#3\" to \"#4\"?":"Soll die Kontonummer \"#1\" zu \"#2\" und den Name \"#3\" zu \"#4\" geändert werden?",
"Edit":"Bearbeiten",
+"Edit article/section assignments":"",
"Edit text block":"Textblock bearbeiten",
"Enter longdescription":"Langtext eingeben",
"Function block actions":"Funktionsblockaktionen",
"Map":"Karte",
+"Orders/Quotations actions":"",
"Part picker":"Artikelauswahl",
"Paste":"Einfügen",
"Paste template":"Vorlage einfügen",
"The selected database is still configured for client \"#1\". If you delete the database that client will stop working until you re-configure it. Do you still want to delete the database?":"Die auswählte Datenbank ist noch für Mandant \"#1\" konfiguriert. Wenn Sie die Datenbank löschen, wird der Mandanten nicht mehr funktionieren, bis er anders konfiguriert wurde. Wollen Sie die Datenbank trotzdem löschen?",
"Time/cost estimate actions":"Aktionen für Kosten-/Zeitabschätzung",
"Toggle marker":"Markierung umschalten",
+"Update quotation/order":"",
"Version actions":"Aktionen für Versionen"
});
return true;
};
+// -------------------------------------------------------------------------
+// --------------------------- quotations/orders ---------------------------
+// -------------------------------------------------------------------------
+
+ns.find_quotation_order_id = function(clicked_elt) {
+ return $(clicked_elt).find('>[name=order_id]').val();
+};
+
+ns.standard_quotation_order_ajax_call = function(key, opt, other_data) {
+ var data = {
+ action: "RequirementSpecOrder/" + key,
+ requirement_spec_id: $('#requirement_spec_id').val(),
+ id: ns.find_quotation_order_id(opt.$trigger)
+ };
+
+ // console.log("I would normally POST the following now:");
+ // console.log(data);
+ $.post("controller.pl", $.extend(data, other_data || {}), kivi.eval_json_result);
+
+ return true;
+};
+
+ns.disable_edit_quotation_order_commands = function(key, opt) {
+ return ns.find_quotation_order_id(opt.$trigger) == undefined;
+};
+
+ns.disable_create_quotation_order_commands = function(key, opt) {
+ return !$('#quotations_and_orders_sections');
+};
+
// -------------------------------------------------------------------------
// ---------------------------- general actions ----------------------------
// -------------------------------------------------------------------------
}, general_actions)
});
+ $.contextMenu({
+ selector: '.quotations-and-orders-context-menu,.quotations-and-orders-order-context-menu',
+ items: $.extend({
+ heading: { name: kivi.t8('Orders/Quotations actions'), className: 'context-menu-heading' }
+ , edit: { name: kivi.t8('Edit article/section assignments'), icon: "edit", callback: ns.standard_quotation_order_ajax_call }
+ , sep1: "---------"
+ , new: { name: kivi.t8('Create new qutoation/order'), icon: "add", callback: ns.standard_quotation_order_ajax_call, disabled: ns.disable_create_quotation_order_commands}
+ , update: { name: kivi.t8('Update quotation/order'), icon: "update", callback: ns.standard_quotation_order_ajax_call, disabled: ns.disable_edit_quotation_order_commands }
+ , sep2: "---------"
+ , delete: { name: kivi.t8('Delete quotation/order'), icon: "delete", callback: ns.ask_delete_quotation_order, disabled: ns.disable_edit_quotation_order_commands }
+ }, general_actions)
+ });
+
$.contextMenu({
selector: '#content',
items: general_actions
'Are you sure you want to remove the marked entries from the queue?' => 'Sind Sie sicher, dass die markierten Einträge von der Warteschlange gelöscht werden sollen?',
'Are you sure you want to update the prices' => 'Sind Sie sicher, dass Sie die Preise aktualisieren wollen?',
'Are you sure?' => 'Sind Sie sicher?',
+ 'Article' => '',
'Article Code' => 'Artikelkürzel',
'Article Code missing!' => 'Artikelkürzel fehlt',
'Article type (see below)' => 'Artikeltyp (siehe unten)',
'Assembly Number missing!' => 'Erzeugnisnummer fehlt!',
'Asset' => 'Aktiva/Mittelverwendung',
'Assets' => 'Aktiva',
+ 'Assignment of articles to sections' => '',
'Assistant for general ledger corrections' => 'Assistent für die Korrektur von Hauptbucheinträgen',
'Assume Tax Consultant Data in Tax Computation?' => 'Beraterdaten in UStVA übernehmen?',
'At least' => 'Mindestens',
'Create new department' => 'Neue Abteilung erfassen',
'Create new payment term' => 'Neue Zahlungsbedingung anlegen',
'Create new project type' => 'Neuen Projekttypen anlegen',
+ 'Create new qutoation/order' => '',
'Create new templates from master templates' => 'Neue Druckvorlagen aus Vorlagensatz erstellen',
'Create new version' => 'Neue Version anlegen',
'Create one from the context menu by right-clicking on this text.' => 'Erstellen Sie einen aus dem Kontextmenü, indem Sie auf diesen Text rechtsklicken.',
'Default client' => 'Standardmandant',
'Default currency' => 'Standardwährung',
'Default currency missing!' => 'Standardwährung fehlt!',
- 'Default hourly rate for new customers' => '',
+ 'Default hourly rate for new customers' => 'Standard-Stundensatz für neue Kunden',
'Default output medium' => 'Standardausgabekanal',
'Default printer' => 'Standarddrucker',
'Default template format' => 'Standardvorlagenformat',
'Delete drafts' => 'Entwürfe löschen',
'Delete links' => 'Verknüpfungen löschen',
'Delete profile' => 'Profil löschen',
+ 'Delete quotation/order' => '',
'Delete requirement spec' => 'Pflichtenheft löschen',
'Delete template' => 'Vorlage löschen',
'Delete text block' => 'Textblock löschen',
'Edit Vendor Invoice' => 'Einkaufsrechnung bearbeiten',
'Edit Warehouse' => 'Lager bearbeiten',
'Edit acceptance status' => 'Abnahmestatus bearbeiten',
+ 'Edit article/section assignments' => '',
'Edit background job' => 'Hintergrund-Job bearbeiten',
'Edit bank account' => 'Bankkonto bearbeiten',
'Edit business' => 'Kunden-/Lieferantentyp bearbeiten',
'No printers have been created yet.' => 'Es wurden noch keine Drucker angelegt.',
'No problems were recognized.' => 'Es wurden keine Probleme gefunden.',
'No project type has been created yet.' => 'Es wurden noch keine Projekttypen angelegt.',
+ 'No quotations or orders have been created yet.' => '',
'No report with id #1' => 'Es gibt keinen Report mit der Id #1',
'No requirement spec statuses has been created yet.' => 'Es wurden noch keine Pflichtenheftstatus angelegt.',
'No requirement spec templates have been created yet.' => 'Es wurden noch keine Pflichtenheftvorlangen angelegt.',
'No risks level has been created yet.' => 'Es wurden noch keine Risikograde angelegt.',
'No sections created yet' => 'Keine Abschnitte erstellt',
'No sections have been created so far.' => 'Bisher wurden noch keine Abschnitte angelegt.',
+ 'No sections have been created yet.' => '',
'No shipto selected to delete' => 'Keine Lieferadresse zum Löschen ausgewählt',
'No summary account' => 'Kein Sammelkonto',
'No text blocks have been created for this position.' => 'Für diese Position wurden noch keine Textblöcke angelegt.',
'Ordered' => 'Von Kunden bestellt',
'Orders' => 'Aufträge',
'Orders / Delivery Orders deleteable' => 'Aufträge / Lieferscheine löschbar',
+ 'Orders/Quotations actions' => '',
'Orientation' => 'Seitenformat',
'Orphaned' => 'Nie benutzt',
'Orphaned currencies' => 'Verwaiste Währungen',
'Quotation Number missing!' => 'Angebotsnummer fehlt!',
'Quotation deleted!' => 'Angebot wurde gelöscht.',
'Quotations' => 'Angebote',
+ 'Quotations and orders' => '',
'Quote character' => 'Anführungszeichen-Symbol',
'Quote chararacter' => 'Anführungszeichen',
'Quoted' => 'Angeboten',
'Reconciliation' => 'Kontenabgleich',
'Record Vendor Invoice' => 'Einkaufsrechnung erfassen',
'Record in' => 'Buchen auf',
+ 'Record number' => '',
'Recorded Tax' => 'Gespeicherte Steuern',
'Recorded taxkey' => 'Gespeicherter Steuerschlüssel',
'Reference' => 'Referenz',
'Requirement Spec Templates' => 'Pflichtenheftvorlagen',
'Requirement Spec Type' => 'Pflichtenhefttyp',
'Requirement Spec Types' => 'Pflichtenhefttypen',
+ 'Requirement Spec Version' => '',
'Requirement Specs' => 'Pflichtenhefte',
'Requirement spec actions' => 'Pflichtenheftaktionen',
'Requirement spec function block #1 with #2 sub function blocks; description: "#3"' => 'Pflichtenheft-Funktionsblock #1 mit #2 Unterfunktionsblöcken; Beschreibung: "#3"',
'Sales margin' => 'Marge',
'Sales margin %' => 'Marge prozentual',
'Sales net amount' => 'VK-Betrag',
+ 'Sales order' => '',
'Sales price' => 'VK-Preis',
'Sales price total' => 'VK-Betrag',
'Sales quotation' => 'Angebot',
'Transaction' => 'Buchung',
'Transaction %d cancelled.' => 'Buchung %d erfolgreich storniert.',
'Transaction Date missing!' => 'Buchungsdatum fehlt!',
+ 'Transaction Description' => '',
'Transaction ID missing.' => 'Die Buchungs-ID fehlt.',
'Transaction deleted!' => 'Buchung gelöscht!',
'Transaction description' => 'Vorgangsbezeichnung',
'Update prices' => 'Preise aktualisieren',
'Update prices of existing entries' => 'Preise von vorhandenen Artikeln aktualisieren',
'Update properties of existing entries' => 'Eigenschaften von existierenden Einträgen aktualisieren',
+ 'Update quotation/order' => '',
'Updated' => 'Erneuert am',
'Updating existing entry in database' => 'Existierenden Eintrag in Datenbank aktualisieren',
'Updating prices of existing entry in database' => 'Preis des Eintrags in der Datenbank wird aktualisiert',
'new Window' => 'neues Fenster',
'next' => 'vor',
'no' => 'nein',
+ 'no article assigned yet' => '',
'no bestbefore' => 'keine Mindesthaltbarkeit',
'no chargenumber' => 'keine Chargennummer',
'none (pricegroup)' => 'keine',
'vendor_list' => 'lieferantenliste',
'warehouse_journal_list' => 'lagerbuchungsliste',
'warehouse_report_list' => 'lagerbestandsliste',
+ 'working copy' => '',
'wrongformat' => 'Falsches Format',
'yearly' => 'jährlich',
'yes' => 'ja',
--- /dev/null
+[%- USE HTML -%][%- USE LxERP -%][%- USE L -%][%- USE P -%]
+<div id="quotations_and_orders" class="quotations-and-orders-context-menu">
+ <h2>[% LxERP.t8("Assignment of articles to sections") %]</h2>
+ [% SET sections = SELF.requirement_spec.sections_sorted %]
+ [% IF !sections.size %]
+ <div>
+ [% LxERP.t8("No sections have been created yet.") %]
+ </div>
+ [% ELSE %]
+ <table id="quotations_and_orders_sections" style="width: 100%">
+ <thead>
+ <tr class="listheading">
+ <th>[% LxERP.t8("Number") %]</th>
+ <th>[% LxERP.t8("Title") %]</th>
+ <th>[% LxERP.t8("Description") %]</th>
+ <th>[% LxERP.t8("Article") %]</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ [% FOREACH section = sections %]
+ <tr class="listrow">
+ <td>[% HTML.escape(section.fb_number) %]</td>
+ <td>[% HTML.escape(section.title) %]</td>
+ <td>[% HTML.escape(P.truncate(section.description)) %]</td>
+ <td>
+ [% IF section.order_part %]
+ [% HTML.escape(section.order_part.partnumber) %] [% HTML.escape(section.order_part.description) %]
+ [% ELSE %]
+ [% LxERP.t8("no article assigned yet") %]
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+ </tbody>
+ </table>
+ [% END %]
+
+ <h2>[% LxERP.t8("Quotations and orders") %]</h2>
+
+ [% SET orders = SELF.requirement_spec.orders_sorted %]
+ [% IF !orders.size %]
+ <div>[% LxERP.t8("No quotations or orders have been created yet.") %]</div>
+ [% ELSE %]
+
+ <table style="width:100%">
+ <thead>
+ <tr class="listheading">
+ <th>[% LxERP.t8("Type") %]</th>
+ <th>[% LxERP.t8("Requirement Spec Version") %]</th>
+ <th>[% LxERP.t8("Record number") %]</th>
+ <th>[% LxERP.t8("Transaction Description") %]</th>
+ <th>[% LxERP.t8("Date") %]</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ [% FOREACH rs_order = orders %]
+ <tr class="listrow quotations-and-orders-order-context-menu">
+ [% L.hidden_tag('order_id', rs_order.id, no_id=1) %]
+ <td>[% rs_order.order.type == 'sales_quotation' ? LxERP.t8('Sales quotation') : LxERP.t8('Sales order') %]</td>
+ <td>
+ [% IF rs_order.version %]
+ [% HTML.escape(rs_order.version.version_number) %]
+ [% ELSE %]
+ [% LxERP.t8("working copy") %]
+ [% END %]
+ </td>
+ <td>[% HTML.escape(rs_order.order.quotation ? rs_order.order.quonumber : rs_order.order.ordnumber) %]</td>
+ <td>[% HTML.escape(rs_order.order.transaction_description) %]</td>
+ <td>[% rs_order.itime.to_kivitendo(precision='day') %]</td>
+ </tr>
+ [%- END %]
+ </tbody>
+ </table>
+ [% END %]
+</div>