Merge pull request #4899 from nabinhait/seriailized_stock_valuation
Seriailized stock valuation
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index c672c5b..9926511 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
from __future__ import unicode_literals
-__version__ = '6.23.6'
+__version__ = '6.23.7'
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/at_austria_chart_Einheitskontenrahmen.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/at_austria_chart_Einheitskontenrahmen.json
new file mode 100644
index 0000000..296be76
--- /dev/null
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/at_austria_chart_Einheitskontenrahmen.json
@@ -0,0 +1,414 @@
+{
+ "country_code": "at",
+ "name": "Austria - Chart of Accounts - Einheitskontenrahmen provided by fairkom.eu",
+ "tree": {
+ "Klasse 0 Aktiva: Anlageverm\u00f6gen": {
+ "0100 Konzessionen ": {"account_type": "Fixed Asset"},
+ "0110 Patentrechte und Lizenzen ": {"account_type": "Fixed Asset"},
+ "0120 Datenverarbeitungsprogramme ": {"account_type": "Fixed Asset"},
+ "0130 Marken, Warenzeichen und Musterschutzrechte, sonstige Urheberrechte ": {"account_type": "Fixed Asset"},
+ "0140 Pacht- und Mietrechte ": {"account_type": "Fixed Asset"},
+ "0150 Bezugs- und ähnliche Rechte ": {"account_type": "Fixed Asset"},
+ "0160 Geschäfts-/Firmenwert ": {"account_type": "Fixed Asset"},
+ "0170 Umgründungsmehrwert ": {"account_type": "Fixed Asset"},
+ "0180 Geleistete Anzahlungen auf immaterielle Vermögensgegenstände": {"account_type": "Fixed Asset"},
+ "0190 Kumulierte Abschreibungen zu immateriellen Vermögensgegenständen ": {"account_type": "Fixed Asset"},
+ "0200 Unbebaute Grundstücke, soweit nicht landwirtschaftlich genutzt ": {"account_type": "Fixed Asset"},
+ "0210 Bebaute Grundstücke (Grundwert) ": {"account_type": "Fixed Asset"},
+ "0220 Landwirtschaftlich genutzte Grundstücke ": {"account_type": "Fixed Asset"},
+ "0230 Grundstücksgleiche Rechte ": {"account_type": "Fixed Asset"},
+ "0300 Betriebs- und Geschäftsgebäude auf eigenem Grund ": {"account_type": "Fixed Asset"},
+ "0310 Wohn- und Sozialgebäude auf eigenem Grund ": {"account_type": "Fixed Asset"},
+ "0320 Betriebs- und Geschäftsgebäude auf fremdem Grund ": {"account_type": "Fixed Asset"},
+ "0330 Wohn- und Sozialgebäude auf fremdem Grund ": {"account_type": "Fixed Asset"},
+ "0340 Grundstückseinrichtungen auf eigenem Grund ": {"account_type": "Fixed Asset"},
+ "0350 Grundstückseinrichtungen auf fremdem Grund ": {"account_type": "Fixed Asset"},
+ "0360 Bauliche Investitionen in fremden (gepachteten) Betriebs- und Geschäftsgebäuden": {"account_type": "Fixed Asset"},
+ "0370 Bauliche Investitionen in fremden (gepachteten) Wohn- und Sozialgebäuden": {"account_type": "Fixed Asset"},
+ "0390 Kumulierte Abschreibungen zu Grundstücken ": {"account_type": "Fixed Asset"},
+ "0400 Maschinen und Geräte ": {"account_type": "Fixed Asset"},
+ "0500 Maschinenwerkzeuge ": {"account_type": "Fixed Asset"},
+ "0510 Allgemeine Werkzeuge und Handwerkzeuge ": {"account_type": "Fixed Asset"},
+ "0520 Prototypen, Formen, Modelle ": {"account_type": "Fixed Asset"},
+ "0530 Andere Erzeugungshilfsmittel (auch Softwarewerkzeuge)": {"account_type": "Fixed Asset"},
+ "0540 Hebezeuge und Montageanlagen ": {"account_type": "Fixed Asset"},
+ "0550 Geringwertige Vermögensgegenstände, soweit im Erzeugungsprozess ": {"account_type": "Fixed Asset"},
+ "0560 Festwerte technische Anlagen und Maschinen ": {"account_type": "Fixed Asset"},
+ "0590 Kumulierte Abschreibungen zu technischen Anlagen und Maschinen ": {"account_type": "Fixed Asset"},
+ "0600 Betriebs- und Geschäftsausstattung, soweit nicht gesondert angeführt ": {"account_type": "Fixed Asset"},
+ "0610 Andere Anlagen, soweit nicht gesondert angeführt ": {"account_type": "Fixed Asset"},
+ "0620 Büromaschinen, EDV-Anlagen ": {"account_type": "Fixed Asset"},
+ "0630 PKW und Kombis ": {"account_type": "Fixed Asset"},
+ "0640 LKW ": {"account_type": "Fixed Asset"},
+ "0650 Andere Beförderungsmittel ": {"account_type": "Fixed Asset"},
+ "0660 Gebinde ": {"account_type": "Fixed Asset"},
+ "0670 Geringwertige Vermögensgegenstände, soweit nicht im Erzeugungssprozess verwendet": {"account_type": "Fixed Asset"},
+ "0680 Festwerte außer technische Anlagen und Maschinen ": {"account_type": "Fixed Asset"},
+ "0690 Kumulierte Abschreibungen zu anderen Anlagen, Betriebs- und Geschäftsausstattung": {"account_type": "Fixed Asset"},
+ "0700 Geleistete Anzahlungen auf Sachanlagen ": {"account_type": "Fixed Asset"},
+ "0710 Anlagen in Bau ": {"account_type": "Fixed Asset"},
+ "0790 Kumulierte Abschreibungen zu geleisteten Anzahlungen auf Sachanlagen ": {"account_type": "Fixed Asset"},
+ "0800 Anteile an verbundenen Unternehmen ": {"account_type": "Fixed Asset"},
+ "0810 Beteiligungen an Gemeinschaftsunternehmen ": {"account_type": "Fixed Asset"},
+ "0820 Beteiligungen an angeschlossenen (assoziierten) Unternehmen ": {"account_type": "Fixed Asset"},
+ "0830 Eigene Anteile, Anteile an herrschenden oder mit Mehrheit beteiligten ": {"account_type": "Fixed Asset"},
+ "0840 Sonstige Beteiligungen ": {"account_type": "Fixed Asset"},
+ "0850 Ausleihungen an verbundene Unternehmen ": {"account_type": "Fixed Asset"},
+ "0860 Ausleihungen an Unternehmen mit Beteiligungsverhältnis": {"account_type": "Fixed Asset"},
+ "0870 Ausleihungen an Gesellschafter ": {"account_type": "Fixed Asset"},
+ "0880 Sonstige Ausleihungen ": {"account_type": "Fixed Asset"},
+ "0890 Anteile an Kapitalgesellschaften ohne Beteiligungscharakter ": {"account_type": "Fixed Asset"},
+ "0900 Anteile an Personengesellschaften ohne Beteiligungscharakter ": {"account_type": "Fixed Asset"},
+ "0910 Genossenschaftsanteile ohne Beteiligungscharakter ": {"account_type": "Fixed Asset"},
+ "0920 Anteile an Investmentfonds ": {"account_type": "Fixed Asset"},
+ "0930 Festverzinsliche Wertpapiere des Anlagevermögens ": {"account_type": "Fixed Asset"},
+ "0980 Geleistete Anzahlungen auf Finanzanlagen ": {"account_type": "Fixed Asset"},
+ "0990 Kumulierte Abschreibungen zu Finanzanlagen ": {"account_type": "Fixed Asset"},
+ "root_type": "Asset"
+ },
+ "Klasse 1 Aktiva: Vorr\u00e4te": {
+ "1000 Bezugsverrechnung": {"account_type": "Stock"},
+ "1100 Rohstoffe": {"account_type": "Stock"},
+ "1200 Bezogene Teile": {"account_type": "Stock"},
+ "1300 Hilfsstoffe": {"account_type": "Stock"},
+ "1350 Betriebsstoffe": {"account_type": "Stock"},
+ "1360 Vorrat Energietraeger": {"account_type": "Stock"},
+ "1400 Unfertige Erzeugnisse": {"account_type": "Stock"},
+ "1500 Fertige Erzeugnisse": {"account_type": "Stock"},
+ "1600 Handelswarenvorrat": {"account_type": "Stock Received But Not Billed"},
+ "1700 Noch nicht abrechenbare Leistungen": {"account_type": "Stock"},
+ "1900 Wertberichtigungen": {"account_type": "Stock"},
+ "1800 Geleistete Anzahlungen": {"account_type": "Stock"},
+ "root_type": "Asset"
+ },
+ "Klasse 3 Passiva: Verbindlichkeiten": {
+ "3020 Steuerr\u00fcckstellungen": {"account_type": "Tax"},
+ "3040 Sonstige R\u00fcckstellungen": {"account_type": "Payable"},
+ "3110 Verbindlichkeiten gegen\u00fcber Bank": {"account_type": "Payable"},
+ "3150 Verbindlichkeiten Darlehen": {"account_type": "Payable"},
+ "3185 Verbindlichkeiten Kreditkarte": {"account_type": "Payable"},
+ "3380 Verbindlichkeiten aus der Annahme gezogener Wechsel u. d. Ausstellungen eigener Wechsel": {
+ "account_type": "Payable"
+ },
+ "3400 Verbindlichkeiten gegen\u00fc. verb. Untern., Verbindl. gegen\u00fc. Untern., mit denen eine Beteiligungsverh\u00e4lnis besteht": {},
+ "3460 Verbindlichkeiten gegenueber Gesellschaftern": {"account_type": "Payable"},
+ "3470 Einlagen stiller Gesellschafter": {"account_type": "Payable"},
+ "3590 Verbindlichkeiten Kommunalabgaben": {"account_type": "Tax"},
+ "3600 Verbindlichkeiten Sozialversicherung": {"account_type": "Payable"},
+ "3000 Allgemeine Verbindlichkeiten (Schuld)": {"account_type": "Payable"},
+ "3700 Sonstige Verbindlichkeiten": {"account_type": "Payable"},
+ "3900 Passive Rechnungsabgrenzungsposten": {"account_type": "Payable"},
+ "3100 Anleihen (einschlie\u00dflich konvertibler)": {"account_type": "Payable"},
+ "3200 Erhaltene Anzahlungen auf Bestellungen": {"account_type": "Payable"},
+ "3040 R\u00fcckstellungen f\u00fcr Abfertigung": {"account_type": "Payable"},
+ "3010 R\u00fcckstellungen f\u00fcr Pensionen": {"account_type": "Payable"},
+ "3530 USt. \u00a719 (reverse charge)": {
+ "account_type": "Tax"
+ },
+ "3500 Verbindlichkeiten aus Umsatzsteuer": {"account_type": "Tax"},
+ "3580 Umsatzsteuer Zahllast": {
+ "account_type": "Tax"
+ },
+ "3510 Umsatzsteuer aus i.g. Erwerb 10%": {
+ "account_type": "Tax"
+ },
+ "3520 Umsatzsteuer aus i.g. Erwerb 20%": {
+ "account_type": "Tax"
+ },
+ "3560 Umsatzsteuer-Evidenzkonto f\u00fcr erhaltene Anzahlungen auf Bestellungen": {},
+ "3360 Verbindlichkeiten aus Lieferungen u. Leistungen EU": {
+ "account_type": "Payable"
+ },
+ "3000 Verbindlichkeiten aus Lieferungen u. Leistungen Inland": {
+ "account_type": "Payable"
+ },
+ "3370 Verbindlichkeiten aus Lieferungen u. Leistungen sonst. Ausland": {
+ "account_type": "Payable"
+ },
+ "3400 Verbindlichkeiten gegen\u00fcber verbundenen Unternehmen": {},
+ "3570 Verrechnung Finanzamt": {
+ "account_type": "Tax"
+ },
+ "root_type": "Liability"
+ },
+ "Klasse 2 Aktiva: Umlaufverm\u00f6gen, Rechnungsabgrenzungen": {
+ "2030 Forderungen aus Lieferungen und Leistungen Inland (0% USt, umsatzsteuerfrei)": {
+ "account_type": "Receivable"
+ },
+ "2010 Forderungen aus Lieferungen und Leistungen Inland (10% USt, umsatzsteuerfrei)": {
+ "account_type": "Receivable"
+ },
+ "2000 Forderungen aus Lieferungen und Leistungen Inland (20% USt, umsatzsteuerfrei)": {
+ "account_type": "Receivable"
+ },
+ "2040 Forderungen aus Lieferungen und Leistungen Inland (sonstiger USt-Satz)": {
+ "account_type": "Receivable"
+ },
+ "2100 Forderungen aus Lieferungen und Leistungen EU": {
+ "account_type": "Receivable"
+ },
+ "2150 Forderungen aus Lieferungen und Leistungen Ausland (Nicht-EU)": {
+ "account_type": "Receivable"
+ },
+ "2200 Forderungen gegen\u00fcber verbundenen Unternehmen": {
+ "account_type": "Receivable"
+ },
+ "2250 Forderungen gegen\u00fcber Unternehmen, mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
+ "account_type": "Receivable"
+ },
+ "2300 Sonstige Forderungen und Verm\u00f6gensgegenst\u00e4nde": {
+ "account_type": "Receivable"
+ },
+ "2630 Sonstige Wertpapiere": {
+ "account_type": "Stock"
+ },
+ "2750 Kassenbest\u00e4nde in Fremdw\u00e4hrung": {
+ "account_type": "Cash"
+ },
+ "2900 Aktive Rechnungsabrenzungsposten": {
+ "account_type": "Receivable"
+ },
+ "2600 Anteile an verbundenen Unternehmen": {
+ "account_type": "Equity"
+ },
+ "2680 Besitzwechsel ohne Forderungen": {
+ "account_type": "Receivable"
+ },
+ "2950 Aktiviertes Disagio": {
+ "account_type": "Receivable"
+ },
+ "2610 Eigene Anteile und Wertpapiere an mit Mehrheit beteiligten Unternehmen": {
+ "account_type": "Receivable"
+ },
+ "2570 Einfuhrumsatzsteuer (bezahlt)": {"account_type": "Tax"},
+
+ "2460 Eingeforderte aber noch nicht eingezahlte Einlagen": {
+ "account_type": "Receivable"
+ },
+ "2180 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Ausland": {
+ "account_type": "Receivable"
+ },
+ "2130 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
+ "account_type": "Receivable"
+ },
+ "2080 Einzelwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
+ "account_type": "Receivable"
+ },
+ "2270 Einzelwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
+ "account_type": "Receivable"
+ },
+ "2230 Einzelwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
+ "account_type": "Receivable"
+ },
+ "2470 Einzelwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
+ "account_type": "Receivable"
+ },
+ "2700 Kassenbestand": {
+ "account_type": "Cash"
+ },
+ "2190 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. sonstiges Ausland": {
+ "account_type": "Receivable"
+ },
+ "2130 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. EU": {
+ "account_type": "Receivable"
+ },
+ "2100 Pauschalwertberichtigungen zu Forderungen aus Lief. und Leist. Inland ": {
+ "account_type": "Receivable"
+ },
+ "2280 Pauschalwertberichtigungen zu Forderungen gegen\u00fcber Unternehmen mit denen ein Beteiligungsverh\u00e4ltnis besteht": {
+ "account_type": "Receivable"
+ },
+ "2240 Pauschalwertberichtigungen zu Forderungen gegen\u00fcber verbundenen Unternehmen": {
+ "account_type": "Receivable"
+ },
+ "2480 Pauschalwertberichtigungen zu sonstigen Forderungen und Verm\u00f6gensgegenst\u00e4nden": {
+ "account_type": "Receivable"
+ },
+ "2740 Postwertzeichen": {
+ "account_type": "Cash"
+ },
+ "2780 Schecks in Euro": {
+ "account_type": "Cash"
+ },
+ "2800 Guthaben bei Kreditinstitut": {
+ "account_type": "Bank"
+ },
+ "2810 Guthaben bei Paypal": {
+ "account_type": "Bank"
+ },
+ "2930 Mietvorauszahlungen": {
+ "account_type": "Receivable"
+ },
+ "2980 Abgrenzung latenter Steuern": {
+ "account_type": "Receivable"
+ },
+ "2500 Vorsteuer": {
+ "account_type": "Receivable"
+ },
+ "2510 Vorsteuer aus innergemeinschaftlichem Erwerb 10%": {
+ "account_type": "Tax"
+ },
+ "2520 Vorsteuer aus innergemeinschaftlichem Erwerb 20%": {
+ "account_type": "Tax"
+ },
+ "2530 Vorsteuer \u00a719/Art 19 ( reverse charge ) ": {
+ "account_type": "Tax"
+ },
+ "2690 Wertberichtigungen zu Wertpapieren und Anteilen": {
+ "account_type": "Receivable"
+ },
+ "root_type": "Asset"
+ },
+ "Klasse 4: Betriebliche Erträge": {
+ "4000 Erlöse 20 %": {"account_type": "Income Account"},
+ "4020 Erl\u00f6se 0 % steuerbefreit": {"account_type": "Income Account"},
+ "4010 Erl\u00f6se 10 %": {"account_type": "Income Account"},
+ "4030 Erl\u00f6se 13 %": {"account_type": "Income Account"},
+ "4040 Erl\u00f6se 0 % innergemeinschaftliche Lieferungen": {"account_type": "Income Account"},
+ "4400 Erl\u00f6sreduktion 0 % steuerbefreit": {"account_type": "Expense Account"},
+ "4410 Erl\u00f6sreduktion 10 %": {"account_type": "Expense Account"},
+ "4420 Erl\u00f6sreduktion 20 %": {"account_type": "Expense Account"},
+ "4430 Erl\u00f6sreduktion 13 %": {"account_type": "Expense Account"},
+ "4440 Erl\u00f6sreduktion 0 % innergemeinschaftliche Lieferungen": {"account_type": "Expense Account"},
+ "4500 Ver\u00e4nderungen des Bestandes an fertigen und unfertigen Erzeugn. sowie an noch nicht abrechenbaren Leistungen": {"account_type": "Income Account"},
+ "4580 Aktivierte Eigenleistungen": {"account_type": "Income Account"},
+ "4600 Erl\u00f6se aus dem Abgang vom Anlageverm\u00f6gen, ausgen. Finanzanlagen": {"account_type": "Income Account"},
+ "4630 Ertr\u00e4ge aus dem Abgang vom Anlageverm\u00f6gen, ausgen. Finanzanlagen": {"account_type": "Income Account"},
+ "4660 Ertr\u00e4ge aus der Zuschreibung zum Anlageverm\u00f6gen, ausgen. Finanzanlagen": {"account_type": "Income Account"},
+ "4700 Ertr\u00e4ge aus der Aufl\u00f6sung von R\u00fcckstellungen": {"account_type": "Income Account"},
+ "4800 \u00dcbrige betriebliche Ertr\u00e4ge": {"account_type": "Income Account"},
+ "root_type": "Income"
+ },
+ "Klasse 5: Aufwand f\u00fcr Material und Leistungen": {
+ "5000 Einkauf Partnerleistungen": {"account_type": "Cost of Goods Sold"},
+ "5100 Verbrauch an Rohstoffen": {"account_type": "Cost of Goods Sold"},
+ "5200 Verbrauch von bezogenen Fertig- und Einzelteilen": {"account_type": "Cost of Goods Sold"},
+ "5300 Verbrauch von Hilfsstoffen": {"account_type": "Cost of Goods Sold"},
+ "5340 Verbrauch Verpackungsmaterial": {"account_type": "Cost of Goods Sold"},
+ "5470 Verbrauch von Kleinmaterial": {"account_type": "Cost of Goods Sold"},
+ "5450 Verbrauch von Reinigungsmaterial": {"account_type": "Cost of Goods Sold"},
+ "5400 Verbrauch von Betriebsstoffen": {"account_type": "Cost of Goods Sold"},
+ "5500 Verbrauch von Werkzeugen und anderen Erzeugungshilfsmittel": {"account_type": "Cost of Goods Sold"},
+ "5600 Verbrauch von Brenn- und Treibstoffen, Energie und Wasser": {"account_type": "Cost of Goods Sold"},
+ "5700 Bearbeitung durch Dritte": {"account_type": "Cost of Goods Sold"},
+ "5900 Aufwandsstellenrechnung Material": {"account_type": "Cost of Goods Sold"},
+ "5820 Skontoertr\u00e4ge (20% USt.)": {"account_type": "Income Account"},
+ "5810 Skontoertr\u00e4ge (10% USt.)": {"account_type": "Income Account"},
+ "5010 Handelswareneinkauf 10 %": {"account_type": "Cost of Goods Sold"},
+ "5020 Handelswareneinkauf 20 %": {"account_type": "Cost of Goods Sold"},
+ "5040 Handelswareneinkauf innergemeinschaftlicher Erwerb 10 % VSt/10 % USt": {"account_type": "Cost of Goods Sold"},
+ "5050 Handelswareneinkauf innergemeinschaftlicher Erwerb 20 % VSt/20 % USt": {"account_type": "Cost of Goods Sold"},
+ "5070 Handelswareneinkauf innergemeinschaftlicher Erwerb ohne Vorsteuerabzug und 10 % USt": {"account_type": "Cost of Goods Sold"},
+ "5080 Handelswareneinkauf innergemeinschaftlicher Erwerb ohne Vorsteuerabzug und 20 % USt": {"account_type": "Cost of Goods Sold"},
+ "root_type": "Expense"
+ },
+ "Klasse 6: Personalaufwand": {
+ "6000 L\u00f6hne": {"account_type": "Payable"},
+ "6200 Geh\u00e4lter": {"account_type": "Payable"},
+ "6400 Aufwendungen f\u00fcr Abfertigungen": {"account_type": "Payable"},
+ "6450 Aufwendungen f\u00fcr Altersversorgung": {"account_type": "Payable"},
+ "6500 Gesetzlicher Sozialaufwand Arbeiter": {"account_type": "Payable"},
+ "6560 Gesetzlicher Sozialaufwand Angestellte": {"account_type": "Payable"},
+ "6600 Lohnabh\u00e4ngige Abgaben und Pflichtbeitr\u00e4gte": {"account_type": "Payable"},
+ "6660 Gehaltsabh\u00e4ngige Abgaben und Pflichtbeitr\u00e4gte": {"account_type": "Payable"},
+ "6700 Sonstige Sozialaufwendungen": {"account_type": "Payable"},
+ "6900 Aufwandsstellenrechnung Personal": {"account_type": "Payable"},
+ "root_type": "Expense"
+ },
+ "Klasse 7: Abschreibungen und sonstige betriebliche Aufwendungen": {
+ "7010 Abschreibungen auf das Anlageverm\u00f6gen (ausgenommen Finanzanlagen)": {"account_type": "Depreciation"},
+ "7100 Sonstige Steuern und Geb\u00fchren": {"account_type": "Tax"},
+ "7200 Instandhaltung u. Reinigung durch Dritte, Entsorgung, Energie": {"account_type": "Expense Account"},
+ "7300 Transporte durch Dritte": {"account_type": "Expense Account"},
+ "7310 Fahrrad - Aufwand": {"account_type": "Expense Account"},
+ "7320 Kfz - Aufwand": {"account_type": "Expense Account"},
+ "7330 LKW - Aufwand": {"account_type": "Expense Account"},
+ "7340 Lastenrad - Aufwand": {"account_type": "Expense Account"},
+ "7350 Reise- und Fahraufwand": {"account_type": "Expense Account"},
+ "7360 Tag- und N\u00e4chtigungsgelder": {"account_type": "Expense Account"},
+ "7380 Nachrichtenaufwand": {"account_type": "Expense Account"},
+ "7400 Miet- und Pachtaufwand": {"account_type": "Expense Account"},
+ "7440 Leasingaufwand": {"account_type": "Expense Account"},
+ "7480 Lizenzaufwand": {"account_type": "Expense Account"},
+ "7500 Aufwand f\u00fcr beigestelltes Personal": {"account_type": "Expense Account"},
+ "7540 Provisionen an Dritte": {"account_type": "Expense Account"},
+ "7580 Aufsichtsratsverg\u00fctungen": {"account_type": "Expense Account"},
+ "7610 Druckerzeugnisse und Vervielf\u00e4ltigungen": {"account_type": "Expense Account"},
+ "7650 Werbung und Repr\u00e4sentationen": {"account_type": "Expense Account"},
+ "7700 Versicherungen": {"account_type": "Expense Account"},
+ "7750 Beratungs- und Pr\u00fcfungsaufwand": {"account_type": "Expense Account"},
+ "7800 Forderungsverluste und Schadensf\u00e4lle": {"account_type": "Expense Account"},
+ "7840 Verschiedene betriebliche Aufwendungen": {"account_type": "Expense Account"},
+ "7910 Aufwandsstellenrechung der Hersteller": {"account_type": "Expense Account"},
+ "7060 Sofortabschreibungen geringwertig": {"account_type": "Expense Account"},
+ "7070 Abschreibungen vom Umlaufverm\u00f6gen, soweit diese die im Unternehmen \u00fcblichen Abschreibungen \u00fcbersteigen": {"account_type": "Depreciation"},
+ "7900 Aufwandsstellenrechnung": {"account_type": "Expense Account"},
+ "7770 Aus- und Fortbildung": {"account_type": "Expense Account"},
+ "7820 Buchwert abgegangener Anlagen, ausgenommen Finanzanlagen": {"account_type": "Expense Account"},
+ "7600 B\u00fcromaterial und Drucksorten": {"account_type": "Expense Account"},
+ "7630 Fachliteratur und Zeitungen ": {"account_type": "Expense Account"},
+ "7960 Herstellungskosten der zur Erzielung der Umsatzerl\u00f6se erbrachten Leistungen": {"account_type": "Expense Account"},
+ "7780 Mitgliedsbeitr\u00e4ge": {"account_type": "Expense Account"},
+ "7880 Skontoertr\u00e4ge auf sonstige betriebliche Aufwendungen": {"account_type": "Expense Account"},
+ "7990 Sonstige betrieblichen Aufwendungen": {"account_type": "Expense Account"},
+ "7680 Spenden und Trinkgelder": {"account_type": "Expense Account"},
+ "7790 Spesen des Geldverkehrs": {"account_type": "Expense Account"},
+ "7830 Verluste aus dem Abgang vom Anlageverm\u00f6gen, ausgenommen Finanzanlagen": {"account_type": "Expense Account"},
+ "7970 Vertriebskosten": {"account_type": "Expense Account"},
+ "7980 Verwaltungskosten": {"account_type": "Expense Account"},
+ "root_type": "Expense"
+ },
+ "Klasse 8: Finanz- und ausserordentliche Ertr\u00e4ge und Aufwendungen": {
+ "8000 Ertr\u00e4ge aus Beteiligungen": {"account_type": "Income Account"},
+ "8050 Ertr\u00e4ge aus anderen Wertpapieren und Ausleihungen des Finanzanlageverm\u00f6gens": {"account_type": "Income Account"},
+ "8100 Zinsen aus Bankguthaben": {"account_type": "Income Account"},
+ "8110 Zinsen aus gewaehrten Darlehen": {"account_type": "Income Account"},
+ "8130 Verzugszinsenertraege": {"account_type": "Income Account"},
+ "8220 Aufwendungen aus Beteiligungen": {"account_type": "Expense Account"},
+ "8260 Aufwendungen aus sonst. Fiananzanlagen und aus Wertpapieren des Umlaufverm\u00f6gens": {},
+ "8280 Zinsen und \u00e4hnliche Aufwendungem": {"account_type": "Expense Account"},
+ "8400 Au\u00dferordentliche Ertr\u00e4ge": {"account_type": "Income Account"},
+ "8450 Au\u00dferordentliche Aufwendungen": {"account_type": "Expense Account"},
+ "8500 Steuern vom Einkommen und vom Ertrag": {
+ "account_type": "Tax"
+ },
+ "8600 Aufl\u00f6sung unversteuerten R\u00fccklagen": {"account_type": "Income Account"},
+ "8700 Aufl\u00f6sung von Kapitalr\u00fccklagen": {"account_type": "Income Account"},
+ "8750 Aufl\u00f6sung von Gewinnr\u00fccklagen": {"account_type": "Income Account"},
+ "8800 Zuweisung zu unversteuerten R\u00fccklagen": {"account_type": "Expense Account"},
+ "8900 Zuweisung zu Gewinnr\u00fccklagen": {"account_type": "Expense Account"},
+ "8100 Buchwert abgegangener Beteiligungen": {"account_type": "Expense Account"},
+ "8130 Buchwert abgegangener Wertpapiere des Umlaufverm\u00f6gens": {"account_type": "Expense Account"},
+ "8120 Buchwert abgegangener sonstiger Finanzanlagen": {"account_type": "Expense Account"},
+ "8990 Gewinnabfuhr bzw. Verlust\u00fcberrechnung aus Ergebnisabf\u00fchrungsvertr\u00e4gen": {"account_type": "Expense Account"},
+ "8350 nicht ausgenutzte Lieferantenskonti": {"account_type": "Expense Account"},
+ "root_type": "Income"
+ },
+ "Klasse 9 Passiva: Eigenkapital, R\u00fccklagen, stille Einlagen, Abschlusskonten": {
+ "9000 Gezeichnetes bzw. gewidmetes Kapital": {
+ "account_type": "Equity"
+ },
+ "9200 Kapitalr\u00fccklagen": {
+ "account_type": "Equity"
+ },
+ "9300 Gewinnr\u00fccklagen": {
+ "account_type": "Equity"
+ },
+ "9400 Bewertungsreserven uns sonst. unversteuerte R\u00fccklagen": {
+ "account_type": "Equity"
+ },
+ "9600 Private Entnahmen": {"account_type": "Equity"},
+ "9610 Privatsteuern": {"account_type": "Equity"},
+ "9700 Einlagen stiller Gesellschafter ": {"account_type": "Equity"},
+ "9900 Evidenzkonto": {"account_type": "Equity"},
+ "9800 Er\u00f6ffnungsbilanzkonto (EBK)": {"account_type": "Equity"},
+ "9880 Jahresergebnis laut Gewinn- und Verlustrechnung (G+V)": {"account_type": "Equity"},
+ "9850 Schlussbilanzkonto (SBK)": {"account_type": "Round Off"},
+ "9190 nicht eingeforderte ausstehende Einlagen und berechtigte Entnahmen von Gesellschaftern": {
+ "account_type": "Equity"
+ },
+ "root_type": "Equity"
+ }
+ }
+ }
+
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
index 4a22de9..3bbf082 100755
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json
@@ -2472,7 +2472,7 @@
"width": "50%"
},
{
- "allow_on_submit": 0,
+ "allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
"depends_on": "eval:doc.is_recurring==1",
@@ -2490,7 +2490,7 @@
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
- "read_only": 1,
+ "read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -2528,6 +2528,32 @@
"bold": 0,
"collapsible": 0,
"depends_on": "eval:doc.is_recurring==1",
+ "description": "Check to send it via Email, uncheck to generate a draft document only.",
+ "fieldname": "notify_by_email",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Notify by Email",
+ "length": 0,
+ "no_copy": 1,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 1,
+ "bold": 0,
+ "collapsible": 0,
+ "depends_on": "eval:doc.notify_by_email==1",
"description": "Enter email id separated by commas, invoice will be mailed automatically on particular date",
"fieldname": "notification_email_address",
"fieldtype": "Code",
@@ -2589,7 +2615,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2016-02-22 09:32:04.196291",
+ "modified": "2016-02-24 16:03:07.975604",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Invoice",
@@ -2743,4 +2769,4 @@
"sort_order": "DESC",
"timeline_field": "supplier",
"title_field": "title"
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
index ab486aa..7ac8601 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json
@@ -3221,7 +3221,7 @@
"width": "50%"
},
{
- "allow_on_submit": 0,
+ "allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
"depends_on": "eval:doc.is_recurring==1",
@@ -3239,7 +3239,7 @@
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
- "read_only": 1,
+ "read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -3272,11 +3272,37 @@
"set_only_once": 0,
"unique": 0
},
- {
+ {
"allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
"depends_on": "eval:doc.is_recurring==1",
+ "description": "Check to send it via Email, uncheck to generate a draft document only.",
+ "fieldname": "notify_by_email",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Notify by Email",
+ "length": 0,
+ "no_copy": 1,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 1,
+ "bold": 0,
+ "collapsible": 0,
+ "depends_on": "eval:doc.notify_by_email==1",
"description": "Enter email id separated by commas, invoice will be mailed automatically on particular date",
"fieldname": "notification_email_address",
"fieldtype": "Code",
@@ -3364,7 +3390,7 @@
"istable": 0,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2016-02-22 09:34:35.695558",
+ "modified": "2016-02-24 15:56:43.416423",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice",
@@ -3459,4 +3485,4 @@
"sort_order": "DESC",
"timeline_field": "customer",
"title_field": "title"
-}
\ No newline at end of file
+}
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json
index fb1781a..9c518d1 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.json
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.json
@@ -2523,7 +2523,7 @@
"unique": 0
},
{
- "allow_on_submit": 0,
+ "allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
"depends_on": "eval:doc.is_recurring==1",
@@ -2541,7 +2541,7 @@
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
- "read_only": 1,
+ "read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -2578,6 +2578,32 @@
"bold": 0,
"collapsible": 0,
"depends_on": "eval:doc.is_recurring==1",
+ "description": "Check to send it via Email, uncheck to generate a draft document only.",
+ "fieldname": "notify_by_email",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Notify by Email",
+ "length": 0,
+ "no_copy": 1,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 1,
+ "bold": 0,
+ "collapsible": 0,
+ "depends_on": "eval:doc.notify_by_email==1",
"description": "Enter email id separated by commas, order will be mailed automatically on particular date",
"fieldname": "notification_email_address",
"fieldtype": "Code",
@@ -2638,7 +2664,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2016-02-22 09:32:53.191526",
+ "modified": "2016-02-25 09:51:38.479762",
"modified_by": "Administrator",
"module": "Buying",
"name": "Purchase Order",
@@ -2772,4 +2798,4 @@
"sort_order": "DESC",
"timeline_field": "supplier",
"title_field": "title"
-}
\ No newline at end of file
+}
diff --git a/erpnext/controllers/recurring_document.py b/erpnext/controllers/recurring_document.py
index 3ecbe5f..d029132 100644
--- a/erpnext/controllers/recurring_document.py
+++ b/erpnext/controllers/recurring_document.py
@@ -38,18 +38,19 @@
recurring_documents = frappe.db.sql("""select name, recurring_id
from `tab{0}` where is_recurring=1
- and docstatus=1 and next_date=%s
+ and (docstatus=1 or docstatus=0) and next_date=%s
and next_date <= ifnull(end_date, '2199-12-31') {1}""".format(doctype, condition), next_date)
exception_list = []
for ref_document, recurring_id in recurring_documents:
if not frappe.db.sql("""select name from `tab%s`
- where %s=%s and recurring_id=%s and docstatus=1"""
+ where %s=%s and recurring_id=%s and (docstatus=1 or docstatus=0)"""
% (doctype, date_field, '%s', '%s'), (next_date, recurring_id)):
try:
reference_doc = frappe.get_doc(doctype, ref_document)
new_doc = make_new_document(reference_doc, date_field, next_date)
- send_notification(new_doc)
+ if reference_doc.notify_by_email:
+ send_notification(new_doc)
if commit:
frappe.db.commit()
except:
@@ -92,7 +93,8 @@
date_field: posting_date,
"from_date": from_date,
"to_date": to_date,
- "fiscal_year": get_fiscal_year(posting_date)[0]
+ "fiscal_year": get_fiscal_year(posting_date)[0],
+ "next_date": get_next_date(from_date, mcount,cint(reference_doc.repeat_on_day_of_month))
})
# copy document fields
@@ -110,7 +112,11 @@
new_document.run_method("on_recurring", reference_doc=reference_doc)
- new_document.submit()
+ if not reference_doc.notify_by_email:
+ new_document.docstatus=0
+ new_document.insert()
+ else:
+ new_document.submit()
return new_document
@@ -181,18 +187,19 @@
#
def validate_notification_email_id(doc):
- if doc.notification_email_address:
- email_list = split_emails(doc.notification_email_address.replace("\n", ""))
+ if doc.notify_by_email:
+ if doc.notification_email_address:
+ email_list = split_emails(doc.notification_email_address.replace("\n", ""))
+
+ from frappe.utils import validate_email_add
+ for email in email_list:
+ if not validate_email_add(email):
+ throw(_("{0} is an invalid email address in 'Notification \
+ Email Address'").format(email))
- from frappe.utils import validate_email_add
- for email in email_list:
- if not validate_email_add(email):
- throw(_("{0} is an invalid email address in 'Notification \
- Email Address'").format(email))
-
- else:
- frappe.throw(_("'Notification Email Addresses' not specified for recurring %s") \
- % doc.doctype)
+ else:
+ frappe.throw(_("'Notification Email Addresses' not specified for recurring %s") \
+ % doc.doctype)
def set_next_date(doc, posting_date):
""" Set next date on which recurring document will be created"""
@@ -200,7 +207,7 @@
if not doc.repeat_on_day_of_month:
msgprint(_("Please enter 'Repeat on Day of Month' field value"), raise_exception=1)
- next_date = get_next_date(posting_date, month_map[doc.recurring_type],
+ next_date = doc.next_date or get_next_date(doc.from_date, month_map[doc.recurring_type],
cint(doc.repeat_on_day_of_month))
frappe.db.set(doc, 'next_date', next_date)
diff --git a/erpnext/controllers/tests/test_recurring_document.py b/erpnext/controllers/tests/test_recurring_document.py
index ef8d5fb..0723f3d 100644
--- a/erpnext/controllers/tests/test_recurring_document.py
+++ b/erpnext/controllers/tests/test_recurring_document.py
@@ -112,7 +112,7 @@
def _test(i):
obj.assertEquals(i+1, frappe.db.sql("""select count(*) from `tab%s`
- where recurring_id=%s and docstatus=1""" % (base_doc.doctype, '%s'),
+ where recurring_id=%s and (docstatus=1 or docstatus=0)""" % (base_doc.doctype, '%s'),
(base_doc.recurring_id))[0][0])
next_date = get_next_date(base_doc.get(date_field), no_of_months,
@@ -121,7 +121,7 @@
manage_recurring_documents(base_doc.doctype, next_date=next_date, commit=False)
recurred_documents = frappe.db.sql("""select name from `tab%s`
- where recurring_id=%s and docstatus=1 order by name desc"""
+ where recurring_id=%s and (docstatus=1 or docstatus=0) order by name desc"""
% (base_doc.doctype, '%s'), (base_doc.recurring_id))
obj.assertEquals(i+2, len(recurred_documents))
diff --git a/erpnext/docs/user/manual/en/accounts/articles/update-stock-option-in-sales-invoice.md b/erpnext/docs/user/manual/en/accounts/articles/update-stock-option-in-sales-invoice.md
index 3f3a470..4c6c659 100644
--- a/erpnext/docs/user/manual/en/accounts/articles/update-stock-option-in-sales-invoice.md
+++ b/erpnext/docs/user/manual/en/accounts/articles/update-stock-option-in-sales-invoice.md
@@ -1,9 +1,9 @@
#Delivery from Sales Invoice
-If you have items delivery and invoicing happening at the same time, you can create delivery from with Sales Invocice itself. Sales Invoice has field called **Update Stock**, just before Item table. If this field is checked, on submission of Sales Invoice, stock of Item will be deducted from selected Warehouse.
+If you have items delivery and invoicing happening at the same time, you can create delivery from with Sales Invoice itself. Sales Invoice has field called **Update Stock**, just before Item table. If this field is checked, on submission of Sales Invoice, stock of Item will be deducted from selected Warehouse.
<img alt="Update Stock" class="screenshot" src="{{docs_base_url}}/assets/img/articles/update-stock.png">
On checking Update Stock, Sales Invoice Item will show relevant fields like Warehouse, Serial No., Batch No., Item valuation etc.
-On submission of Sales Invoice, with general ledger posting, stock ledger posting will happen as well.
\ No newline at end of file
+On submission of Sales Invoice, with general ledger posting, stock ledger posting will happen as well.
diff --git a/erpnext/docs/user/manual/en/accounts/articles/withdrawing-salary-from-owners-equity-account.md b/erpnext/docs/user/manual/en/accounts/articles/withdrawing-salary-from-owners-equity-account.md
index b18ec6c..1e7a993 100644
--- a/erpnext/docs/user/manual/en/accounts/articles/withdrawing-salary-from-owners-equity-account.md
+++ b/erpnext/docs/user/manual/en/accounts/articles/withdrawing-salary-from-owners-equity-account.md
@@ -1,4 +1,4 @@
-#WIthdrawing Salary from Owner's Equity Account
+#Withdrawing Salary from Owner's Equity Account
### Question
@@ -18,4 +18,4 @@
1. Credit **Cash** $1000
2. Debit **Owner's Draws** $1000
-<!-- markdown -->
\ No newline at end of file
+<!-- markdown -->
diff --git a/erpnext/docs/user/manual/es/accounts/accounting-entries.md b/erpnext/docs/user/manual/es/accounts/accounting-entries.md
new file mode 100644
index 0000000..ffda0b5
--- /dev/null
+++ b/erpnext/docs/user/manual/es/accounts/accounting-entries.md
@@ -0,0 +1,73 @@
+<!---
+WORK IN PROGRESS
+-->
+
+El concepto de contabilidad se explica con el siguiente ejemplo: Se toma a
+"Tea Stall" como compañía y se observa como registrar entradas contables
+para el negocio.
+
+ * Mama (El propietario de Tea-stall) invierte $25000 para iniciar el negocio.
+
+
+
+__Análisis:__ Mama invierte 25000 en la compañía, con la esperanza de obtener alguna
+ganancia. En otras palabras, la compañía es responsable del pago de $25000 a mama en
+el futuro. Así, la cuenta "Mama" es una cuenta de pasivo y es un crédito. El balance de
+efectivo de la compañía se incrementa debido a la inversión, "Caja" es un activo de
+la compañía y debe ser debitado.
+
+ * La compañía necesita equipos (Estufa, tetera, pocillos, etc) y materias primas (te,
+ azucar, leche, etc) de inmediato. Decide comprar en una tienda cercana "Super Bazaar"
+ que pertenece a un amigo y le concede cierto crédito. Los equipos cuestan 2800 y las
+ materias primas valen 2200. La compañía paga 2000 de un total de 5000.
+
+
+
+__Análisis:__ Los equipos son "Activos Fijos" (porque tienen una larga vida útil) de la
+compañía y las materias primas son "Activos corrientes" (porque son usados en la
+operación diaria del negocio). Entonces, "Equipos" y "Existencias disponibles" deben
+ser debitadas para incrementar su valor. La compañía pagó 2000, entonces la cuenta
+"Caja" debe ser reducida en dicha cantidad, es decir debe ser crédito. Y dado que la
+compañía tiene la obligación de pagar 3000 a "Super Bazaar", dicha cuenta debe tener
+un crédito de 3000.
+
+
+ * Mama (quien está pendiente de todas las entradas)decide anotar las ventas al finalizar
+ cada día, de tal manera que pueda analizar las ventas diarias. Al finaliza el primer
+ día, Tea Stall vende 325 tazas de té, lo cual da una venta neta de RS. 1575. El propietario
+ registra feliz su primer día de ventas.
+
+
+
+__Análisis:__ Los ingresos han sido anotados en la cuenta "Ventas de Té", la cual se
+debita para incrementar el valor y la misma cantidad se acredita de la cuenta
+"Caja". Digamos, para hacer 325 tazas de té cuestan Rs 800, entonces la
+cuenta "Existencias disponibles" debe ser reducidas (crédito) en 800 y el gasto
+debe ser registado en la cuenta "Costos de bienes vendidos" en la misma cantidad.
+
+Al finalizar el mes, la compañía paga el arriendo del local (5000) y el salario de
+un empleado (8000), el cual trabajó desde el primer día.
+
+
+
+### Registro de ganancias
+
+A medida que avanza el mes, la compañía compra más materias primas para el negocio.
+Después de un mes se anotan las ganancias en el "Libro de Balance" y en el de
+"Estado de Pérdidas y Ganancias". Ya que las ganacias pertenecen a Mama y no a
+la compañía, se considera que dichas ganacias son una obligación (la compañía tiene
+que pagárselas a Mama). Cuando el Libro de Balance no está balanceado, p.e. el
+débito no es igual al crédito, la ganacia aún no ha sido anotada. Se debe realziar
+la siguiente entrada:
+
+
+
+Explicación: Las ventas y gastos netos son 40000 y 20000 respectivamente.
+Entonces, la compañía tuvo una ganancia de 20000. Para registrar esa entrada,
+la cuenta "Pérdidas y Ganancias" debe ser debitada y la cuenta "Capital"
+debe ser acreditada. El balance neto de caja es 44000 y existe alguna materia
+prima que vale $1000.
+
+**Trabajo en progreso.**
+
+{next}
diff --git a/erpnext/docs/user/manual/es/accounts/accounting-reports.md b/erpnext/docs/user/manual/es/accounts/accounting-reports.md
new file mode 100644
index 0000000..925ea1f
--- /dev/null
+++ b/erpnext/docs/user/manual/es/accounts/accounting-reports.md
@@ -0,0 +1,48 @@
+<!---
+WORK IN PROGRESS
+-->
+
+Algunos de los principales reportes contables son:
+
+### Libro Mayor
+
+El Libro Mayor está basada en la tabla de Entradas y puede ser filtrado por
+cuenta y por periodo específico de tiempo. Esto ayuda a tener un reporte
+actualizado de todas las entradas que existan para una cuetna dada en un
+periodo determinado.
+
+<img alt="Libro Mayor" class="screenshot"
+ src="{{docs_base_url}}/assets/img/accounts/general-ledger.png">
+
+### Balance Contable
+
+Es el listado del balance para todas las cuentas ("Libro Mayor" y "Grupo")
+en una fecha particular. Para cada cuenta proporciona:
+
+ * Apertura
+ * Débitos
+ * Creditos
+ * Cierre
+
+<img alt="Balance Contable" class="screenshot" src="{{docs_base_url}}/assets/img/accounts/trial-balance.png">
+
+La suma de todos los balances de cierre en el Balance Contable debe ser igual a cero.
+
+### Cuentas por Pagar y Cuentas por Cobrar (CP / CC)
+
+Este reporte permite hacer seguimiento a las facturas enviadas a los clientes y proveedores. En este
+reporte, se resaltan diferentes periodos de tiempo. p.e. entre 0-30 días, 30-60 días y así por el estilo.
+
+<img alt="Accounts Receivable" class="screenshot" src="{{docs_base_url}}/assets/img/accounts/accounts-receivable.png">
+
+### Registro de Ventas y Compras
+
+En este reporte, cada cuenta de impuestos es transpuesta en columnas. For cada factura y por cada item
+se puede obtener la cantidad de impuestos individuales que debe ser pagados, de acuerdo a la
+tabla de Impuestos y Contribuciones,
+
+<img alt="Sales Register" class="screenshot" src="{{docs_base_url}}/assets/img/accounts/sales-register.png">
+
+**Trabajo en progreso.**
+
+{next}
diff --git a/erpnext/docs/user/manual/es/accounts/advance-payment-entry.md b/erpnext/docs/user/manual/es/accounts/advance-payment-entry.md
new file mode 100644
index 0000000..81491bc
--- /dev/null
+++ b/erpnext/docs/user/manual/es/accounts/advance-payment-entry.md
@@ -0,0 +1,67 @@
+<!---
+WORK IN PROGRESS
+-->
+Los pagos realizados por el cliente antes de recibir el envío del producto se
+denominan Anticipos. Para ordenes de alto costo, los negocios esperan recibir
+dcho tipos de pago.
+
+
+__Por Ejemplo:__ Consider a customer- Jane D'souza placing an order for a double
+bed costing $10000 She is asked to give some advance before the furniture
+house begins work on her order. She gives them $5000 in cash.
+
+
+Go to Accounts and open a new Journal Entry to make the advance entry.
+
+> Accounts > Documents > Journal Entry > New Journal Entry
+
+Mention the voucher type as cash voucher. This differs for different
+customers. If somebody pays by cheque the voucher type will be Bank Voucher.
+Then select the customer account and make the respective debit and credit
+entries.
+
+Since the customer has given $5000 as cash advance,it will be recorded as a
+credit entry against the customer. To balance it with the debit entry [Double
+accounting Entry] enter $5000 as debit against the company's cash account. In
+the row "Is Advance" click 'Yes'.
+
+#### Figure 1 : Journal Entry -Advance Entry
+
+<img class="screenshot" alt="Advace Payment" src="{{docs_base_url}}/assets/img/accounts/advance-payment-1.png">
+
+### Double Entry Accounting
+
+Double entry bookkeeping is a system of accounting in which every transaction
+has a corresponding positive and negative entry : debits and credits. Every
+transaction involves a [debit entry
+](http://www.e-conomic.co.uk/accountingsystem/glossary/debit)in one account
+and a [credit
+entry](http://www.e-conomic.co.uk/accountingsystem/glossary/credit) in another
+account. This means that every transaction must be recorded in two accounts;
+one account will be debited because it receives value and the other account
+will be credited because it has given value.
+
+
+#### Figure 2: Transaction and Difference Entry
+
+<img class="screenshot" alt="Advace Payment" src="{{docs_base_url}}/assets/img/accounts/advance-payment-2.png">
+
+Save and submit the JV. If this document is not saved it will not be pulled in
+other accounting documents.
+
+When you make a new Sales Invoice for the same customer, mention the advance
+in the Sales Invoice Form.
+
+To link the Sales Invoice to the Journal Entry which mentions the advance
+payment entry, click on ‘Get Advances Received’. Allocate the amount of
+advance in the advances table. The accounting will be adjusted accordingly.
+
+#### Figure 3: Receive Advance
+
+<img class="screenshot" alt="Advace Payment" src="{{docs_base_url}}/assets/img/accounts/advance-payment-3.png">
+
+Save and submit the Sales Invoice.
+
+**Trabajo en progreso.**
+
+{next}
diff --git a/erpnext/docs/user/manual/es/accounts/index.md b/erpnext/docs/user/manual/es/accounts/index.md
new file mode 100644
index 0000000..9599bf9
--- /dev/null
+++ b/erpnext/docs/user/manual/es/accounts/index.md
@@ -0,0 +1,33 @@
+<!---
+WORK IN PROGRESS
+-->
+Al final del ciclo de compra y venta viene la facturación y los pagos.
+Quizás se tenga un contador en el equipo, quizás se haga la contabilidad
+por cuenta propia o quizás se tenga contratado un tercero que realice la tarea.
+En todos los casos, la contabilidad finaciera forma parte del núcleo de
+cualquier sistema de gestión del negocio tal como los ERP.
+
+En **ERPNext**, las operaciones contables consisten en 3 transacciones principales:
+
+ * Factura de ventas: Las facturas que se entregan al Cliente correspondientes a
+ los servicios o productos que se proveen.
+ * Factura de Compra: Facturas que los proveedores le entregan a la compañía por
+ la compra de sus productos o servicios.
+ * Entradas
+
+
+At the end of sales and purchase cycle comes billing and payments. You may have
+an accountant in your team, or you may be doing accounting yourself, or you may
+have outsourced your accounting. In all the cases financial accounting forms the core of any business management system like an ERP.
+
+In ERPNext, your accounting operations consists of 3 main transactions:
+
+ * Sales Invoice: The bills that you raise to your Customers for the products or services you provide.
+ * Purchase Invoice: Bills that your Suppliers give you for their products or services.
+ * Entradas Diarias: Para contabilizar entradas, tales cvomo pagos, créditos y otros tipos.
+
+### Temas
+
+**Trabajo en progreso.**
+
+{index}
diff --git a/erpnext/docs/user/manual/es/accounts/index.txt b/erpnext/docs/user/manual/es/accounts/index.txt
new file mode 100644
index 0000000..bad8436
--- /dev/null
+++ b/erpnext/docs/user/manual/es/accounts/index.txt
@@ -0,0 +1,3 @@
+advance-payment-entry
+accounting-reports
+accounting-entries
diff --git a/erpnext/docs/user/manual/es/index.md b/erpnext/docs/user/manual/es/index.md
new file mode 100644
index 0000000..5c2bcef
--- /dev/null
+++ b/erpnext/docs/user/manual/es/index.md
@@ -0,0 +1,12 @@
+<!---
+WORK IN PROGRESS
+-->
+# Manual de Usuario (Español)
+
+### Contenido:
+
+{index}
+
+**Trabajo en progreso.**
+
+[The Spanish Translation of the ERPNext manual is in progress. Click here to see the english manual]({{ docs_base_url }}/user/manual/en)
diff --git a/erpnext/docs/user/manual/es/index.txt b/erpnext/docs/user/manual/es/index.txt
new file mode 100644
index 0000000..e6573f2
--- /dev/null
+++ b/erpnext/docs/user/manual/es/index.txt
@@ -0,0 +1 @@
+accounts
diff --git a/erpnext/docs/user/manual/index.md b/erpnext/docs/user/manual/index.md
index 3a992d9..a2db1ba 100644
--- a/erpnext/docs/user/manual/index.md
+++ b/erpnext/docs/user/manual/index.md
@@ -1,6 +1,10 @@
+<!---
+WORK IN PROGRESS
+-->
# ERPNext User Manual
Select your language
1. [English](en)
1. [Deutsch](de)
+1. [Español](es)
\ No newline at end of file
diff --git a/erpnext/docs/user/manual/index.txt b/erpnext/docs/user/manual/index.txt
index c574d07..2c4c454 100644
--- a/erpnext/docs/user/manual/index.txt
+++ b/erpnext/docs/user/manual/index.txt
@@ -1 +1 @@
-en
+en
\ No newline at end of file
diff --git a/erpnext/fixtures/web_form.json b/erpnext/fixtures/web_form.json
new file mode 100644
index 0000000..a24107e38b
--- /dev/null
+++ b/erpnext/fixtures/web_form.json
@@ -0,0 +1,380 @@
+[
+ {
+ "allow_comments": 0,
+ "allow_delete": 0,
+ "allow_edit": 0,
+ "allow_multiple": 0,
+ "breadcrumbs": null,
+ "doc_type": "Lead",
+ "docstatus": 0,
+ "doctype": "Web Form",
+ "introduction_text": "To contact us sales persons",
+ "is_standard": 0,
+ "login_required": 0,
+ "modified": "2015-01-22 10:43:02.928698",
+ "name": "contact",
+ "page_name": "contact",
+ "published": 1,
+ "success_message": "Thanks for contact us. We will soon get back to you.",
+ "success_url": "/contact",
+ "title": "Contact",
+ "web_form_fields": [
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "lead_name",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Contact Name",
+ "options": null,
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "company_name",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Organization Name",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "email_id",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Email Id",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "website",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Website",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ }
+ ],
+ "web_page_link_text": null
+ },
+ {
+ "allow_comments": 1,
+ "allow_delete": 1,
+ "allow_edit": 1,
+ "allow_multiple": 1,
+ "breadcrumbs": "[{\"title\":\"Issues\", \"name\":\"issues\"}]",
+ "doc_type": "Issue",
+ "docstatus": 0,
+ "doctype": "Web Form",
+ "introduction_text": null,
+ "is_standard": 1,
+ "login_required": 1,
+ "modified": "2015-06-01 08:14:26.350792",
+ "name": "issues",
+ "page_name": "issues",
+ "published": 1,
+ "success_message": "",
+ "success_url": "/issues",
+ "title": "Issues",
+ "web_form_fields": [
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "subject",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Subject",
+ "options": null,
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": "Open",
+ "description": null,
+ "fieldname": "status",
+ "fieldtype": "Select",
+ "hidden": 0,
+ "label": "Status",
+ "options": "Open\nReplied\nHold\nClosed",
+ "read_only": 1,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "description",
+ "fieldtype": "Text",
+ "hidden": 0,
+ "label": "Description",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "attachment",
+ "fieldtype": "Attach",
+ "hidden": 0,
+ "label": "Attachment",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ }
+ ],
+ "web_page_link_text": null
+ },
+ {
+ "allow_comments": 0,
+ "allow_delete": 0,
+ "allow_edit": 1,
+ "allow_multiple": 1,
+ "breadcrumbs": null,
+ "doc_type": "Address",
+ "docstatus": 0,
+ "doctype": "Web Form",
+ "introduction_text": null,
+ "is_standard": 1,
+ "login_required": 1,
+ "modified": "2015-11-23 08:21:53.924318",
+ "name": "addresses",
+ "page_name": "addresses",
+ "published": 1,
+ "success_message": null,
+ "success_url": "/addresses",
+ "title": "Addresses",
+ "web_form_fields": [
+ {
+ "default": null,
+ "description": "",
+ "fieldname": "address_title",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Address Title",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "address_type",
+ "fieldtype": "Select",
+ "hidden": 0,
+ "label": "Address Type",
+ "options": "Billing\nShipping\nOffice\nPersonal\nPlant\nPostal\nShop\nSubsidiary\nWarehouse\nOther",
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "address_line1",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Address Line 1",
+ "options": null,
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "address_line2",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Address Line 2",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "city",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "City/Town",
+ "options": null,
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "state",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "State",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "pincode",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Postal Code",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "country",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "label": "Country",
+ "options": "Country",
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": null,
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "label": null,
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "email_id",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Email Id",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "phone",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Phone",
+ "options": null,
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": "0",
+ "description": "",
+ "fieldname": "is_primary_address",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "label": "Preferred Billing Address",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": "0",
+ "description": "",
+ "fieldname": "is_shipping_address",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "label": "Preferred Shipping Address",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ }
+ ],
+ "web_page_link_text": null
+ },
+ {
+ "allow_comments": 0,
+ "allow_delete": 0,
+ "allow_edit": 0,
+ "allow_multiple": 0,
+ "breadcrumbs": "[{\"title\":\"Jobs\", \"name\":\"jobs\"}]",
+ "doc_type": "Job Applicant",
+ "docstatus": 0,
+ "doctype": "Web Form",
+ "introduction_text": null,
+ "is_standard": 0,
+ "login_required": 0,
+ "modified": "2016-02-19 16:46:57.448416",
+ "name": "job_application",
+ "page_name": "job_application",
+ "published": 1,
+ "success_message": "Thank you for applying.",
+ "success_url": "/jobs",
+ "title": "Job Application",
+ "web_form_fields": [
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "job_title",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Job Title",
+ "options": "",
+ "read_only": 1,
+ "reqd": 0
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "applicant_name",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Applicant Name",
+ "options": null,
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "email_id",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "label": "Email Id",
+ "options": "Email",
+ "read_only": 0,
+ "reqd": 0
+ },
+ {
+ "default": "Cover Letter/Message",
+ "description": null,
+ "fieldname": "message",
+ "fieldtype": "Text",
+ "hidden": 0,
+ "label": "Message",
+ "options": null,
+ "read_only": 0,
+ "reqd": 1
+ },
+ {
+ "default": null,
+ "description": null,
+ "fieldname": "upload_cv",
+ "fieldtype": "Attach",
+ "hidden": 0,
+ "label": "Upload CV",
+ "options": null,
+ "read_only": 0,
+ "reqd": 0
+ }
+ ],
+ "web_page_link_text": null
+ }
+]
\ No newline at end of file
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 958fc83..f47185e 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -7,7 +7,7 @@
app_description = """ERP made simple"""
app_icon = "icon-th"
app_color = "#e74c3c"
-app_version = "6.23.6"
+app_version = "6.23.7"
app_email = "info@erpnext.com"
app_license = "GNU General Public License (v3)"
source_link = "https://github.com/frappe/erpnext"
@@ -40,6 +40,8 @@
calendars = ["Task", "Production Order", "Time Log", "Leave Application", "Sales Order", "Holiday List"]
+fixtures = ["Web Form"]
+
website_generators = ["Item Group", "Item", "Sales Partner"]
website_context = {
@@ -68,6 +70,13 @@
"doctype": "Delivery Note",
"parents": [{"title": _("Shipments"), "name": "shipments"}]
}
+ },
+ {"from_route": "/jobs", "to_route": "Job Opening"},
+ {"from_route": "/jobs/<path:name>", "to_route": "job_opening",
+ "defaults": {
+ "doctype": "Job Opening",
+ "parents": [{"title": _("Job Opening"), "name": "jobs"}]
+ }
}
]
diff --git a/erpnext/hr/doctype/employee/test_employee.py b/erpnext/hr/doctype/employee/test_employee.py
index 618be1b..dbd510b 100644
--- a/erpnext/hr/doctype/employee/test_employee.py
+++ b/erpnext/hr/doctype/employee/test_employee.py
@@ -12,7 +12,7 @@
class TestEmployee(unittest.TestCase):
def test_birthday_reminders(self):
employee = frappe.get_doc("Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0])
- employee.date_of_birth = "1990" + frappe.utils.nowdate()[4:]
+ employee.date_of_birth = "1992" + frappe.utils.nowdate()[4:]
employee.company_email = "test@example.com"
employee.save()
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.json b/erpnext/hr/doctype/job_applicant/job_applicant.json
index 423ab7e..fc579cb 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.json
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.json
@@ -108,7 +108,7 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "fieldname": "job_opening",
+ "fieldname": "job_title",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
@@ -184,7 +184,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2016-02-12 00:38:31.773297",
+ "modified": "2016-02-19 16:43:24.705867",
"modified_by": "Administrator",
"module": "HR",
"name": "Job Applicant",
@@ -204,11 +204,33 @@
"print": 1,
"read": 1,
"report": 1,
+ "restrict": 0,
+ "restricted": 0,
"role": "HR User",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1
+ },
+ {
+ "amend": 0,
+ "apply_user_permissions": 0,
+ "cancel": 0,
+ "create": 0,
+ "delete": 0,
+ "email": 0,
+ "export": 0,
+ "if_owner": 0,
+ "import": 0,
+ "permlevel": 0,
+ "print": 0,
+ "read": 1,
+ "report": 0,
+ "role": "Guest",
+ "set_user_permissions": 0,
+ "share": 0,
+ "submit": 0,
+ "write": 0
}
],
"read_only": 0,
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.py b/erpnext/hr/doctype/job_applicant/job_applicant.py
index b0482cd..f1c0362 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.py
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.py
@@ -7,10 +7,12 @@
from frappe.model.document import Document
import frappe
from frappe import _
-from frappe.utils import comma_and
+from frappe.utils import comma_and, validate_email_add
sender_field = "email_id"
+class DuplicationError(frappe.ValidationError): pass
+
class JobApplicant(Document):
def onload(self):
offer_letter = frappe.get_all("Offer Letter", filters={"job_applicant": self.name})
@@ -25,6 +27,14 @@
def validate(self):
self.check_email_id_is_unique()
+ validate_email_add(self.email_id, True)
+ if frappe.db.sql("""select applicant_name from `tabJob Applicant` where email_id= %s and job_title= %s""",
+ (self.email_id, self.job_title)):
+ frappe.throw(_("Application already exist for {0} against Job Opening - {1}")
+ .format(self.applicant_name, self.job_title), DuplicationError)
+
+ if not self.get("__islocal") and not self.upload_cv:
+ frappe.throw(_("CV Required"))
def check_email_id_is_unique(self):
if self.email_id:
@@ -33,3 +43,5 @@
if names:
frappe.throw(_("Email id must be unique, already exists for {0}").format(comma_and(names)), frappe.DuplicateEntryError)
+
+
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_opening/job_opening.js b/erpnext/hr/doctype/job_opening/job_opening.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/hr/doctype/job_opening/job_opening.js
diff --git a/erpnext/hr/doctype/job_opening/job_opening.json b/erpnext/hr/doctype/job_opening/job_opening.json
index f4380ad..d05fe48 100644
--- a/erpnext/hr/doctype/job_opening/job_opening.json
+++ b/erpnext/hr/doctype/job_opening/job_opening.json
@@ -25,6 +25,7 @@
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
@@ -48,6 +49,7 @@
"options": "Open\nClosed",
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -71,6 +73,7 @@
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
+ "print_hide_if_no_value": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
@@ -89,7 +92,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2015-11-16 06:29:48.769149",
+ "modified": "2016-02-17 17:29:04.401527",
"modified_by": "Administrator",
"module": "HR",
"name": "Job Opening",
@@ -114,8 +117,29 @@
"share": 1,
"submit": 0,
"write": 1
+ },
+ {
+ "amend": 0,
+ "apply_user_permissions": 0,
+ "cancel": 0,
+ "create": 0,
+ "delete": 0,
+ "email": 0,
+ "export": 0,
+ "if_owner": 0,
+ "import": 0,
+ "permlevel": 0,
+ "print": 0,
+ "read": 1,
+ "report": 0,
+ "role": "Guest",
+ "set_user_permissions": 0,
+ "share": 0,
+ "submit": 0,
+ "write": 0
}
],
"read_only": 0,
- "read_only_onload": 0
+ "read_only_onload": 0,
+ "sort_order": "ASC"
}
\ No newline at end of file
diff --git a/erpnext/projects/doctype/time_log/test_time_log.py b/erpnext/projects/doctype/time_log/test_time_log.py
index 8d5694f..81a352f 100644
--- a/erpnext/projects/doctype/time_log/test_time_log.py
+++ b/erpnext/projects/doctype/time_log/test_time_log.py
@@ -20,6 +20,22 @@
from_time= tl1.from_time, to_time= tl1.to_time, do_not_save= 1)
self.assertRaises(OverlapError, tl2.insert)
+
+ tl3 = make_time_log_test_record(user= "test@example.com", employee= "_T-Employee-0002",
+ from_time= tl1.from_time - datetime.timedelta(hours=1),
+ to_time= tl1.to_time + datetime.timedelta(hours=1), do_not_save= 1)
+
+ self.assertRaises(OverlapError, tl3.insert)
+
+ tl4 = make_time_log_test_record(user= "test@example.com", employee= "_T-Employee-0002",
+ from_time= tl1.from_time + datetime.timedelta(minutes=20),
+ to_time= tl1.to_time + datetime.timedelta(minutes=30), do_not_save= 1)
+
+ self.assertRaises(OverlapError, tl4.insert)
+
+ make_time_log_test_record(user= "test@example.com", employee= "_T-Employee-0002",
+ from_time= tl1.to_time,
+ to_time= tl1.to_time + datetime.timedelta(hours=1))
def test_production_order_status(self):
prod_order = make_prod_order_test_record(item= "_Test FG Item 2", qty= 1, do_not_submit= True)
diff --git a/erpnext/projects/doctype/time_log/time_log.py b/erpnext/projects/doctype/time_log/time_log.py
index 5242b2c..b2a855d 100644
--- a/erpnext/projects/doctype/time_log/time_log.py
+++ b/erpnext/projects/doctype/time_log/time_log.py
@@ -88,8 +88,8 @@
existing = frappe.db.sql("""select name, from_time, to_time from `tabTime Log`
where `{0}`=%(val)s and
(
- (%(from_time)s between from_time and to_time) or
- (%(to_time)s between from_time and to_time) or
+ (%(from_time)s > from_time and %(from_time)s < to_time) or
+ (%(to_time)s > from_time and %(to_time)s < to_time) or
(%(from_time)s <= from_time and %(to_time)s >= to_time))
and name!=%(name)s
and docstatus < 2""".format(fieldname),
diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json
index 73c5d20..1be2031 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.json
+++ b/erpnext/selling/doctype/sales_order/sales_order.json
@@ -2826,7 +2826,7 @@
"unique": 0
},
{
- "allow_on_submit": 0,
+ "allow_on_submit": 1,
"bold": 0,
"collapsible": 0,
"depends_on": "eval:doc.is_recurring==1",
@@ -2844,7 +2844,7 @@
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
- "read_only": 1,
+ "read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
@@ -2881,6 +2881,32 @@
"bold": 0,
"collapsible": 0,
"depends_on": "eval:doc.is_recurring==1",
+ "description": "Check to send it via Email, uncheck to generate a draft document only.",
+ "fieldname": "notify_by_email",
+ "fieldtype": "Check",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Notify by Email",
+ "length": 0,
+ "no_copy": 1,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 1,
+ "bold": 0,
+ "collapsible": 0,
+ "depends_on": "eval:doc.notify_by_email==1",
"description": "Enter email id separated by commas, order will be mailed automatically on particular date",
"fieldname": "notification_email_address",
"fieldtype": "Code",
@@ -2941,7 +2967,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2016-02-22 09:35:08.094329",
+ "modified": "2016-02-24 16:10:47.732147",
"modified_by": "Administrator",
"module": "Selling",
"name": "Sales Order",
@@ -3116,4 +3142,4 @@
"sort_order": "DESC",
"timeline_field": "customer",
"title_field": "title"
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 95b2dd1..679bd2d 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -71,7 +71,7 @@
from erpnext.controllers.status_updater import validate_status
validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"])
-
+
pc_obj = frappe.get_doc('Purchase Common')
pc_obj.validate_for_items(self)
@@ -125,7 +125,7 @@
if d.ordered_qty and d.ordered_qty > d.qty:
frappe.throw(_("The total Issue / Transfer quantity {0} in Material Request {1} \
cannot be greater than requested quantity {2} for Item {3}").format(d.ordered_qty, d.parent, d.qty, d.item_code))
-
+
elif self.material_request_type == "Manufacture":
d.ordered_qty = flt(frappe.db.sql("""select sum(qty)
from `tabProduction Order` where material_request = %s
@@ -133,7 +133,7 @@
(self.name, d.name))[0][0])
frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)
-
+
self._update_percent_field({
"target_dt": "Material Request Item",
"target_parent_dt": self.doctype,
@@ -228,7 +228,7 @@
target_doc.set("items", [d for d in target_doc.get("items")
if d.get("item_code") in supplier_items and d.get("qty") > 0])
-
+
set_missing_values(source, target_doc)
for mr in material_requests:
@@ -263,7 +263,7 @@
and mr.material_request_type = 'Purchase'
and mr.per_ordered < 99.99
and mr.docstatus = 1
- and mr.status != 'Stopped'
+ and mr.status != 'Stopped'
order by mr_item.item_code ASC""" % ', '.join(['%s']*len(supplier_items)),
tuple(supplier_items))
else:
@@ -360,10 +360,10 @@
production_orders.append(prod_order.name)
else:
errors.append(d.item_code + " in Row " + cstr(d.idx))
- if production_orders:
+ if production_orders:
message = ["""<a href="#Form/Production Order/%s" target="_blank">%s</a>""" % \
(p, p) for p in production_orders]
- msgprint(_("The following Production Orders were created : \n {0} ").format(new_line_sep(message)))
+ msgprint(_("The following Production Orders were created:" + '\n' + new_line_sep(message)))
if errors:
- msgprint(_("Productions Orders cannot be raised for : \n {0}").format(new_line_sep(errors)))
- return production_orders
\ No newline at end of file
+ msgprint(_("Productions Orders cannot be raised for:" + '\n' + new_line_sep(errors)))
+ return production_orders
diff --git a/erpnext/templates/pages/job_opening.html b/erpnext/templates/pages/job_opening.html
new file mode 100644
index 0000000..6a7ceb1
--- /dev/null
+++ b/erpnext/templates/pages/job_opening.html
@@ -0,0 +1,20 @@
+
+<head>
+<title>{{doc.job_title}}</title>
+</head>
+{% extends "templates/web.html" %}
+{% block header %}
+<h1>{{ doc.job_title }}</h1>
+{% endblock %}
+
+{% block breadcrumbs %}
+ {% include "templates/includes/breadcrumbs.html" %}
+{% endblock %}
+
+{% block page_content %}
+
+<p>{{ doc.description }}</p>
+
+<input class="btn btn-large btn-primary" type="button" onclick="location.href='/job_application?job_title={{ doc.job_title }}';" value="Apply Now" />
+
+{% endblock %}
\ No newline at end of file
diff --git a/erpnext/templates/pages/job_opening.py b/erpnext/templates/pages/job_opening.py
new file mode 100644
index 0000000..1bcfce2
--- /dev/null
+++ b/erpnext/templates/pages/job_opening.py
@@ -0,0 +1,16 @@
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+from frappe import _
+
+def get_context(context):
+ context.no_cache = 1
+ context.doc = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name)
+ context.parents = frappe.form_dict.parents
+
+ if not context.doc.has_website_permission("read"):
+ frappe.throw(_("Not Permitted"), frappe.PermissionError)
+
diff --git a/setup.py b/setup.py
index 92e4a92..76c0c12 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
from pip.req import parse_requirements
-version = "6.23.6"
+version = "6.23.7"
requirements = parse_requirements("requirements.txt", session="")
setup(