sales_delivery_order_show_delete => { type => 'boolean', default => 'true' },
sales_order_show_delete => { type => 'boolean', default => 'true' },
sales_purchase_order_ship_missing_column => { type => 'boolean', default => 'false' },
+ sales_purchase_record_numbers_changeable => { type => 'boolean', default => 'false', not_null => 1 },
sales_serial_eq_charge => { type => 'boolean', default => 'false', not_null => 1 },
sdonumber => { type => 'text' },
sepa_creditor_id => { type => 'text' },
Platzhalter enthalten, die vom Beleg selber stammen. So könnte
z.B. in der Artikelbeschreibung automatisch die Rechnungsnummer
ersetzt werden. Beispiel: »Abrechnungszeitraum bis <%invnumber%>«
+- Verkaufs- & Einkaufsbelege: kivitendo kann so konfiguriert werden,
+ dass die Belegnummern von Belegen, die auf unserer Seite erzeugt
+ werden, nicht mehr editierbar sind. In dem Fall vergibt kivitendo
+ sie immer automatisch und zeigt sie in den Belegmasken nur noch an.
Bugfixes (Tracker: https://www.kivitendo.de/redmine):
'If disabled purchase invoices can only be created by conversion from existing requests for quotations, purchase orders and purchase delivery orders.' => 'Falls deaktiviert, so können Einkaufsrechnungen nur durch Umwandlung aus bestehenden Preisanfragen, Lieferantenaufträgen und Einkaufslieferscheinen angelegt werden.',
'If disabled sales orders cannot be converted into sales invoices directly.' => 'Falls deaktiviert, so können Verkaufsaufträge nicht direkt in Verkaufsrechnungen umgewandelt werden.',
'If disabled sales quotations cannot be converted into sales invoices directly.' => 'Falls deaktiviert, so können Verkaufsangebote nicht direkt in Verkaufsrechnungen umgewandelt werden.',
+ 'If disabled, record numbers for sales records & purchase records produced by our side will always be auto-generated and cannot be changed later.' => 'Falls deaktiviert, werden Belegnummern in Verkaufs- und Einkaufsbelegen, die auf unserer Seite erzeugt wurden, immer automatisch vergeben und können anschließend nicht mehr geändert werden.',
'If enabled Factur-X/ZUGFeRD conformant sales invoice PDFs will be created.' => 'Falls aktiviert, werden Factur-X-/ZUGFeRD-konforme PDFs für Verkaufsrechnungen erzeugt.',
'If enabled a column will be shown in sales and purchase orders that lists both the amount and the value not shipped yet for each item.' => 'Falls eingeschaltet, wird für jede Position in Auftragsbestätigungen und Lieferantenaufträgen eine Spalte mit noch nicht gelieferter Menge und Wert angezeigt.',
'If enabled a warning will be shown if a sales invoices is created without having a sales delivery order as a predecessor.' => 'Falls aktiv, wird eine Warnung beim Buchen einer Verkaufsrechnung angezeigt, falls es keinen Lieferschein als Vorgänger gibt.',
'Record Vendor Invoice' => 'Einkaufsrechnung erfassen',
'Record in' => 'Buchen auf',
'Record number' => 'Belegnummer',
+ 'Record numbers changeable' => 'Änderbarkeit von Belegnummern',
'Record templates' => 'Belegvorlagen',
'Record type to create' => 'Anzulegender Belegtyp',
'Record\'s files' => 'Belegdateien',
'warehouse_journal_list' => 'lagerbuchungsliste',
'warehouse_report_list' => 'lagerbestandsliste',
'warehouse_usage_list' => 'Lagerentnahmeliste',
+ 'will be set upon posting' => 'wird beim Buchen vergeben',
+ 'will be set upon saving' => 'wird beim Speichern vergeben',
'with skonto acc. to pt' => 'mit Skonto nach ZB',
'with_skonto_pt' => 'mit Skonto nach ZB',
'without skonto' => 'ohne Skonto',
--- /dev/null
+-- @tag: defaults_sales_purchase_record_numbers_changeable
+-- @description: Verkauf: Belegnummern nicht mehr ändern können
+-- @depends: release_3_5_8
+ALTER TABLE defaults
+ADD COLUMN sales_purchase_record_numbers_changeable BOOLEAN
+DEFAULT FALSE NOT NULL;
<td>[% L.select_tag('defaults.payments_changeable', SELF.payment_options, value_key = 'value', title_key = 'title', default = SELF.defaults.payments_changeable) %]</td>
<td>[% LxERP.t8('Should payments be and when should they be changeable after posting?') %]</td>
</tr>
+ <tr>
+ <td align="right">[% LxERP.t8('Record numbers changeable') %]</td>
+ <td>[% L.yes_no_tag('defaults.sales_purchase_record_numbers_changeable', SELF.defaults.sales_purchase_record_numbers_changeable) %]</td>
+ <td>[% LxERP.t8('If disabled, record numbers for sales records & purchase records produced by our side will always be auto-generated and cannot be changed later.') %]</td>
+ </tr>
<tr> </tr>
<tr> </tr>
<tr>
<th width="70%" align="right" nowrap>[% 'Delivery Order Number' | $T8 %]</th>
- <td><input name="donumber" id="donumber" size="11" value="[% HTML.escape(donumber) %]"[% RO %]></td>
+ <td>
+[%- IF !is_customer || INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %]
+ [% L.input_tag("donumber", donumber, size="11", readonly=delivered) %]
+[%- ELSIF id %]
+ [% HTML.escape(donumber) %]
+ [% L.hidden_tag("donumber", donumber) %]
+[%- ELSE %]
+ [% LxERP.t8("will be set upon saving") %]
+[%- END %]
+ </td>
</tr>
<tr>
[%- IF is_type_credit_note %]
<tr>
<th align="right" nowrap>[% 'Credit Note Number' | $T8 %]</th>
- <td colspan="3"><input size='11' name="invnumber" id="invnumber" value="[% HTML.escape(invnumber) %]"></td>
+ <td colspan="3">
+[%- IF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %]
+ [% L.input_tag("invnumber", invnumber, size="11") %]
+[%- ELSIF id %]
+ [% L.hidden_tag("invnumber", invnumber) %]
+ [% HTML.escape(invnumber) %]
+[%- ELSE %]
+ [% LxERP.t8("will be set upon posting") %]
+[%- END %]
+ </td>
</tr>
<tr>
<th align="right" nowrap>[% 'Invoice Number' | $T8 %]</th>
[%- ELSE %]
<tr>
<th align="right" nowrap>[% 'Invoice Number' | $T8 %]</th>
- <td colspan="3"><input size='11' name="invnumber" id="invnumber" value="[% HTML.escape(invnumber) %]"></td>
+ <td colspan="3">
+[%- IF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %]
+ [% L.input_tag("invnumber", invnumber, size="11") %]
+[%- ELSIF id %]
+ [% L.hidden_tag("invnumber", invnumber) %]
+ [% HTML.escape(invnumber) %]
+[%- ELSE %]
+ [% LxERP.t8("will be set upon posting") %]
+[%- END %]
+ </td>
</tr>
<tr>
<th align="right">[% 'Invoice Date' | $T8 %]</th>
[%- IF is_order %]
<tr>
<th width="70%" align="right" nowrap>[% 'Order Number' | $T8 %]</th>
- <td><input name="ordnumber" id="ordnumber" size="11" value="[% HTML.escape(ordnumber) %]"></td>
+ <td>
+[%- IF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %]
+ [% L.input_tag("ordnumber", ordnumber, size="11") %]
+[%- ELSIF id %]
+ [% HTML.escape(ordnumber) %]
+ [% L.hidden_tag("ordnumber", ordnumber) %]
+[%- ELSE %]
+ [% LxERP.t8("will be set upon saving") %]
+[%- END %]
+ </td>
</tr>
[%- END %]
<tr>
<th width="70%" align="right" nowrap>[% IF is_req_quo %][% 'RFQ Number' | $T8 %][% ELSE %][% 'Quotation Number' | $T8 %][% END %]</th>
- <td><input name="quonumber" id="quonumber" size="11" value="[% HTML.escape(quonumber) %]"></td>
+ <td>
+[%- IF is_order || INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %]
+ [% L.input_tag("quonumber", quonumber, size="11") %]
+[%- ELSIF id %]
+ [% HTML.escape(quonumber) %]
+ [% L.hidden_tag("quonumber", quonumber) %]
+[%- ELSE %]
+ [% LxERP.t8("will be set upon saving") %]
+[%- END %]
+ </td>
</tr>
[%- IF is_order %]
<tr>
[%- IF (SELF.type == "sales_order" || SELF.type == "purchase_order") -%]
<tr>
<th width="70%" align="right" nowrap>[% 'Order Number' | $T8 %]</th>
- <td>[% L.input_tag('order.ordnumber', SELF.order.ordnumber, size = 11, onchange='kivi.Order.set_number_in_title(this)') %]</td>
+ <td>
+ [%- IF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %]
+ [% L.input_tag('order.ordnumber', SELF.order.ordnumber, size = 11, onchange='kivi.Order.set_number_in_title(this)') %]
+ [%- ELSIF SELF.order.id %]
+ [% HTML.escape(SELF.order.ordnumber) %]
+ [% L.hidden_tag("order.ordnumber", SELF.order.ordnumber) %]
+ [% ELSE %]
+ [% LxERP.t8("will be set upon saving") %]
+ [%- END %]
+ </td>
</tr>
[%- END -%]
[%- END -%]
<tr>
<th width="70%" align="right" nowrap>[% quo_nr_txt | $T8 %]</th>
- [%- IF (SELF.type == "sales_order" || SELF.type == "purchase_order") -%]
- <td>[% L.input_tag('order.quonumber', SELF.order.quonumber, size = 11) %]</td>
- [%- ELSE -%]
- <td>[% L.input_tag('order.quonumber', SELF.order.quonumber, size = 11, onchange='kivi.Order.set_number_in_title(this)') %]</td>
- [%- END -%]
+ <td>
+ [%- IF (SELF.type == "sales_order" || SELF.type == "purchase_order") -%]
+ [% L.input_tag('order.quonumber', SELF.order.quonumber, size = 11) %]
+ [%- ELSIF INSTANCE_CONF.get_sales_purchase_record_numbers_changeable %]
+ [% L.input_tag('order.quonumber', SELF.order.quonumber, size = 11, onchange='kivi.Order.set_number_in_title(this)') %]
+ [%- ELSIF SELF.order.id %]
+ [% HTML.escape(SELF.order.quonumber) %]
+ [% L.hidden_tag("order.quonumber", SELF.order.quonumber) %]
+ [% ELSE %]
+ [% LxERP.t8("will be set upon saving") %]
+ [%- END %]
+ </td>
</tr>
[%- IF (SELF.type == "sales_order" || SELF.type == "purchase_order") -%]