From 00677f334ed22a9dbdb869fa79f153fb0d421f51 Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Mon, 25 Nov 2019 11:58:14 +0530 Subject: [PATCH] fix: user progress code cleanup --- erpnext/hooks.py | 2 - .../images/illustrations/collaboration.png | Bin 0 -> 3849 bytes .../public/images/illustrations/customer.png | Bin 0 -> 4093 bytes .../images/illustrations/letterhead.png | Bin 0 -> 1613 bytes .../public/images/illustrations/onboard.png | Bin 0 -> 2742 bytes .../public/images/illustrations/product.png | Bin 0 -> 3136 bytes .../public/images/illustrations/supplier.png | Bin 0 -> 3531 bytes erpnext/public/images/illustrations/user.png | Bin 0 -> 7887 bytes .../setup/doctype/setup_progress/__init__.py | 0 .../doctype/setup_progress/setup_progress.js | 8 - .../setup_progress/setup_progress.json | 123 -------- .../doctype/setup_progress/setup_progress.py | 63 ---- .../setup_progress/test_setup_progress.js | 23 -- .../setup_progress/test_setup_progress.py | 9 - .../doctype/setup_progress_action/__init__.py | 0 .../setup_progress_action.json | 253 --------------- .../setup_progress_action.py | 9 - erpnext/utilities/onboarding_utils.py | 25 +- erpnext/utilities/user_progress.py | 287 ------------------ 19 files changed, 9 insertions(+), 793 deletions(-) create mode 100644 erpnext/public/images/illustrations/collaboration.png create mode 100644 erpnext/public/images/illustrations/customer.png create mode 100644 erpnext/public/images/illustrations/letterhead.png create mode 100644 erpnext/public/images/illustrations/onboard.png create mode 100644 erpnext/public/images/illustrations/product.png create mode 100644 erpnext/public/images/illustrations/supplier.png create mode 100644 erpnext/public/images/illustrations/user.png delete mode 100644 erpnext/setup/doctype/setup_progress/__init__.py delete mode 100644 erpnext/setup/doctype/setup_progress/setup_progress.js delete mode 100644 erpnext/setup/doctype/setup_progress/setup_progress.json delete mode 100644 erpnext/setup/doctype/setup_progress/setup_progress.py delete mode 100644 erpnext/setup/doctype/setup_progress/test_setup_progress.js delete mode 100644 erpnext/setup/doctype/setup_progress/test_setup_progress.py delete mode 100644 erpnext/setup/doctype/setup_progress_action/__init__.py delete mode 100644 erpnext/setup/doctype/setup_progress_action/setup_progress_action.json delete mode 100644 erpnext/setup/doctype/setup_progress_action/setup_progress_action.py delete mode 100644 erpnext/utilities/user_progress.py diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 9e74bfd290..a88bb44ada 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -40,8 +40,6 @@ after_install = "erpnext.setup.install.after_install" boot_session = "erpnext.startup.boot.boot_session" notification_config = "erpnext.startup.notifications.get_notification_config" get_help_messages = "erpnext.utilities.activation.get_help_messages" -get_user_progress_slides = "erpnext.utilities.user_progress.get_user_progress_slides" -update_and_get_user_progress = "erpnext.utilities.user_progress_utils.update_default_domain_actions_and_get_state" leaderboards = "erpnext.startup.leaderboard.get_leaderboards" diff --git a/erpnext/public/images/illustrations/collaboration.png b/erpnext/public/images/illustrations/collaboration.png new file mode 100644 index 0000000000000000000000000000000000000000..12c67e394ccf22e12ff8e0c149139e82e73b321f GIT binary patch literal 3849 zcmZ`+WmprA*Bvd5G}1Nc7(;M$cTXCnhUA1%O2`mK4CzKtQW{}MBOu`@NkJNkA>FBf ze|{g|5ATP2&vVYb=ehUmi8VIVq9l7j1^@skb+pw@?-2Q4-6Oo~ZZhS{cR=`D#XtoB zs7oZjb|AXrTu$1i1^_@1@NO>>0Qhq!AvXa4e+d9!+a3UbWB~w7-np$N@^=G#M?Ecd z0H7kC7j(x+y|t};0RXDr{|YZ%n2PmIB=OTR&>&eOr>7;P4VgJ2x%=d&j=Bo;<=kH0 zs}On(Mr!|m7K*&MPwp8fk|oMip)AE^d7}a$M_|=<39}BExKV0BaK=}u zm$(xac-#Z>&!w7W7T+79=y@5?0q{81(00D%+jwp_cn0hjQBz<1qlxwT(5W=BXBpu@ zcpRJE+q8qmdOR@jG5aiH5FfraP@ua1yG7^ z?>$-|=pMf*?$M8I+;PE#ThUP{%J`tp>gE0CkC26WG0cudqJ8fOPC^4yau( zF|o`{Cj=>1zin8#e-8R^jz`bG3PC!X84gg;)Y%60FqY6tyK!a(M zt~!A=h$i05i7_w!@8dC&A*}Y1*86Fr3KQyW`mM5CyNpo&!9}^U9xXvL?LZp?-pOV)j2(PRzAZMk_vk81KMzs-Bu2zM< z&wbK@7KO}xXC$bUT?tAMQhjn97qdq`F1$NZ%02Z=%VM%Ur8ymu*8=ykxFVJ>kj1pO z7dL}}?}}N!YUNT0OjI(%g-2aP#%^GY%@+KR%yUFJaTJ8p11a`Xwhg}^z!N?rPOeYtk9)@{Tw_AOcZ??P^FPw9bG4z25mx*G3S7 z`|GXfs-SmVD`VuBUPbyyJ$MVtEI7FA^>LHiO!lC-F-?BA!zAnzZv_Dkd`{k|G{+He z$-Xi|BJ`b~dWSAx*k~mzTQ5b6z)Zs`a|0 zonvR@vFKi=Tki2KirCymlI|RS2MFh)FkVvk(_}b`q5KKyrgGSQ8|^$Njn(*6OcSWf zy(BgrPm>&N9f$LZjmqrXaqsd^W>G$w5?@2kLr^HtG&<`lh>)DX*{2}p%SxlB!?^I2>8omsB|23eu5nPc(9!S$;db0GM;^qhuqqL9T(OhwEr>&x?S&pK+dyl9S_= zEqLI}3wM(4%t3P}bWcHfbUBZ?UU|f+aNil36pxe)BEfd2A^gxM&7WtdZF4lBdl7%7 z;N9tdb;)2j;atw7lm=A2`DFvtu}IFNd<7XZOOKusg8;RM_;4rBO>V`orPM z8jCz)cB&qr-xHSz394Lo@mH>C-jC@5h$oHOkNARpUd0%Qkhh&u(x+C?A@gjBy0*HY zl399=vL9xgN+<>3ab18TEpgaQ%%c_SVQ2|79)lIoY5iIxQT$f;BQvz<_ENPi9w8j9 zHm=^ap5#C1d;XVi4_24}-=UMHi!4y|%NW2cP6Ks;_w+(#Er6c5Mllmfm8@;Gk7bYq zzKw}>2?LtOKY$A}EdxTccd^K$AI3v$rBbM^BdY*L^(Ap%ZnDjaRsn5&pQIX+id(G)My1I z5%y@_C-p^d|l8Fl+%erFZx^_qMO~qPU~!y3oslv>8d*K#^MmKTZmfj(>T){e&9(y? zf^3weiW&aWqD5!iCUJQS)6Y7DDoL;N5K^7{xNXY(YLdTSLGzsWrp+V=r;jjac=|UL%V3p^a(453 zuPx11SuRxY7}aLW%$pj)MRm_-u7y;XkL?3#Ru#5sw@LGVP9)~!F;~k+jI#`blDzYL z{T(uSGVi%5arVXRFk3EI3pP>+Wj9gefNtY!yW)1ceje_ri&Ux8YE@1cK+$})2FiY9O&sN-G`q9zJkrTpg}EeNJi4Mt(rzsj3f)0v!(q+W5vc z73*WOIE!T)FrE>|Qc=~qFjzwMlS+egtE#l^+CS;y z^6d?{fFNSCT7M5W>$~=HUFBXuPX?jfg>-av256MB^xK~zHl_!tkZAJXjS$sIx=${2PW!q10t`}w>YWbjzj#XqlT{Tan zp~?}&B;+*97Il~=Uy4z@R)2cfu_|>5bfz=yN!*owe6`lBH{|+_nQf&M#k-5cB3neH zJ#l{NPaX=1wB6rW*>A24Gm50OxD1Ub#i+e9?zP<*sAqoLqmv;K5dyO{#@04hDA}^q zK~I2EmX0$XN6`esPBr`MJulp>M|UM(c{D9NP3iV#tdnv@Uq2+v=E~Ener2FI%Y=Oq z0X8vAwGnyPF^^z6K=&Qr{(?P>V+Lx4-=t?BwEW_Zqg|m8UBTophP&lzFm8cY1=8tB zTDs(ipQpqudw}v%G{Z2Kz$OXxsIB4qb)^&|qQk&UiX6n7qO=pcu_V#dvqIuB?w?_n z@tNdoq^Tko?k^-mmXdWsxGIWzOdhDZF$5&{Xyo3qjFHxws%JiC{B3Pj3_Ua59Hk3k zGUmd{jr37>{zgPPaR^^qADqv3bDP4>)|Lxp1vfh_IfJ6Ve_?;+S@>4)cqAPo6rdE<|01M5&Rt2R0Cg`BTMg;ney273 zruxG&)EU=T7Q$7KAfBx&7nQ=vdgk;5KR?6jcsQ1bemt|oVNYRh$lV-+{`XD0Ba0QV zWDofb@FuUfq;MY3tMMxk-g9N~V@62B*nW{TVzR&2S;(IgAA(X#0H5uJE(re4iZ^}k z5&T@-l3V}D@3WFTSqv^ZgADgP{nl{|_SleRen#|--Zu7+p4mmLN6;$#OI$UcBCXu0 z%%);aigC=DN^cR1j?)Ls&xmF zh*f8?Op?>8=_V^K*-QIG^wQWhcshDgc^OGrQ@BqB(+4gZh9>xHwM z%d7w2a11p)zB91=cfst1i(jAv0tN^S3>0&Nd-yszc*DeAAfCV5mw#}#1klkiRIgFB GfAc@J)HmJ$ literal 0 HcmV?d00001 diff --git a/erpnext/public/images/illustrations/customer.png b/erpnext/public/images/illustrations/customer.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ddbf3bb4709407ef493926e3490336568f6543 GIT binary patch literal 4093 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 literal 0 HcmV?d00001 diff --git a/erpnext/public/images/illustrations/letterhead.png b/erpnext/public/images/illustrations/letterhead.png new file mode 100644 index 0000000000000000000000000000000000000000..37df6d7f6fce07fd2604c4c8387dd18869b9bc54 GIT binary patch literal 1613 zcmZ`(do>*s zFI0QlN*gjEZq5z>#U~Aj(o7+m;>!V0Y5EyR_Bs_EX;Gf*LUojXtE8bWCtFQ2>IPV% zE zAO>neRn`oW5hBZ7VXw?QZYNlZm{Bz(XXDL+X#NI4iiQD4guQVGUS){JKThOYi~i~u zUKn9?=5jid-;{E~I+I2oX>@1nx3d-XB?-)!;D$=eG#gv?eBS$e$mnw33+4y?n{T_V z@ogT8r~Xvxy{}`BEG@wX3%|C-;@ebW80<+cyOpuljrCbG#yrvWFI#N(e6GP2Of(KD z>^xLx5x>_&B@p`6?S={rG5inv+jpd%`W5J{#fCC3Sv?0&C7zK-G5!&K5#eE7AXZeN z&ufwHzN8M%5x-eY>v^>dQ*VF4zU|~+w0#uz-I%k!Wp(x4S^;Y)awYNFS5C*W^wZNV zQ3w4R%evU&4#)Jzl24bO4KJot)p+#Se_)2L2Kv5sokB-da!!?~v!`?LVxIy;ln-AT zI<`s1c*=VTjC{&9ZMf{VBj9FfOl{ubgf(X>-}&cQ@m1>A&g)s;4@nUCxCb^{zB3;i zcmA;jAzL z2HFtvu#_o8g_ls@yN8}VKn7^1=0^w8vT9#3=4RP;j9b|WN24MiXZ*edQhl53Iz_{^ zx4b8lNO!XvjIhUjG+{QYW%IK5WTmqQ`??EVX7 z!aJTj!xBlCpuZ){W>H;Iw{dwOl%;>J>{fbx#sbRDU3{LL#;bGBbkZTGSk{YZUbC&e z7sxY+ciitmbBfX}21mjp(o2B*QmPrkPlM z6i!d^QncG4(~|5b$FD%Th;UUo(`OJFRXH-2{b0{`S(yGr1RAp4k1Js4*K5&cv&C&CZ>VDdvZ+-k zwN|V&ox2%4w@P6-@ONQ24Nk5Lq?ieki)7@5$1Q= z0C5^F*93GABA5%yRQa);lW6z$D;e@tLFY$(4QBS|$&{`D<0&_E;sxb|?ouu2lB4`% zJy%=kjVHHFK5SDYZNmpZSFNjC{xpBF;^;bTnMHrR_*Wxr=Imz#GvKF-4kAWaDR|}} zdXfB!Wx&K-WdKD-&lE$J0P{UiMA=?QGR^8Y%@@ZM#3qs|anxZGV@FO^pQfPD^F_(| z`xSQm@(3Ib_R}ppH^J}KRrI$-EtL_cqt2U}e4ES7{Bb2oJLy)~{JEl@d|}cx0b6wsGb*4tW{-EP4c22v&$Fc)FJOUEyYd!?)Krs+t8DPX9_=9!lp4MwzWI_3@ zFSLi>Y7zr2+!70mio$-$Hx7sE!j7(P!CV3{94=E5^NSuo`*CD#%jF3089qHWAU@n8SJBA@8AQH^2P0h_si3D%+O(cRPiD0pg zKp+ta8DF;N{!0)U70L|T|Nnx;l2M#gp!L(iD=Li33yxs`kH^C^_wD8E4vuEvqhiAI SCTz8(L*U}*;c#m!dgyN&#IyVW literal 0 HcmV?d00001 diff --git a/erpnext/public/images/illustrations/onboard.png b/erpnext/public/images/illustrations/onboard.png new file mode 100644 index 0000000000000000000000000000000000000000..094aa3f8ddfc1a07762df08cb3c134ae3ce19384 GIT binary patch literal 2742 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 literal 0 HcmV?d00001 diff --git a/erpnext/public/images/illustrations/product.png b/erpnext/public/images/illustrations/product.png new file mode 100644 index 0000000000000000000000000000000000000000..f864b7af60ef44849084225da7f601bcbb33a7b7 GIT binary patch literal 3136 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 BlxP3| literal 0 HcmV?d00001 diff --git a/erpnext/public/images/illustrations/user.png b/erpnext/public/images/illustrations/user.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd7db210d481d3ad5d78277776102d327fe21a2 GIT binary patch literal 7887 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 literal 0 HcmV?d00001 diff --git a/erpnext/setup/doctype/setup_progress/__init__.py b/erpnext/setup/doctype/setup_progress/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/setup/doctype/setup_progress/setup_progress.js b/erpnext/setup/doctype/setup_progress/setup_progress.js deleted file mode 100644 index 5c78bd5075..0000000000 --- a/erpnext/setup/doctype/setup_progress/setup_progress.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Setup Progress', { - refresh: function() { - - } -}); diff --git a/erpnext/setup/doctype/setup_progress/setup_progress.json b/erpnext/setup/doctype/setup_progress/setup_progress.json deleted file mode 100644 index 09072d4665..0000000000 --- a/erpnext/setup/doctype/setup_progress/setup_progress.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2017-08-27 21:01:42.032109", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "actions_sb", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Actions", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "actions", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Actions", - "length": 0, - "no_copy": 0, - "options": "Setup Progress Action", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 1, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "max_attachments": 0, - "modified": "2017-09-21 11:52:56.106659", - "modified_by": "Administrator", - "module": "Setup", - "name": "Setup Progress", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "All", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 1, - "read_only": 1, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/setup/doctype/setup_progress/setup_progress.py b/erpnext/setup/doctype/setup_progress/setup_progress.py deleted file mode 100644 index e1402f5844..0000000000 --- a/erpnext/setup/doctype/setup_progress/setup_progress.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe, json -from frappe.model.document import Document - -class SetupProgress(Document): - pass - -def get_setup_progress(): - if not getattr(frappe.local, "setup_progress", None): - frappe.local.setup_progress = frappe.get_doc("Setup Progress", "Setup Progress") - - return frappe.local.setup_progress - -def get_action_completed_state(action_name): - for d in get_setup_progress().actions: - if d.action_name == action_name: - return d.is_completed - -def update_action_completed_state(action_name): - action_table_doc = [d for d in get_setup_progress().actions - if d.action_name == action_name][0] - update_action(action_table_doc) - -def update_action(doc): - doctype = doc.action_doctype - docname = doc.action_document - field = doc.action_field - - if not doc.is_completed: - if doc.min_doc_count: - if frappe.db.count(doctype) >= doc.min_doc_count: - doc.is_completed = 1 - doc.save() - if docname and field: - d = frappe.get_doc(doctype, docname) - if d.get(field): - doc.is_completed = 1 - doc.save() - -def update_domain_actions(domain): - for d in get_setup_progress().actions: - domains = json.loads(d.domains) - if domains == [] or domain in domains: - update_action(d) - -def get_domain_actions_state(domain): - state = {} - for d in get_setup_progress().actions: - domains = json.loads(d.domains) - if domains == [] or domain in domains: - state[d.action_name] = d.is_completed - return state - -@frappe.whitelist() -def set_action_completed_state(action_name): - action_table_doc = [d for d in get_setup_progress().actions - if d.action_name == action_name][0] - action_table_doc.is_completed = 1 - action_table_doc.save() diff --git a/erpnext/setup/doctype/setup_progress/test_setup_progress.js b/erpnext/setup/doctype/setup_progress/test_setup_progress.js deleted file mode 100644 index 9e84e0cb15..0000000000 --- a/erpnext/setup/doctype/setup_progress/test_setup_progress.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Setup Progress", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially([ - // insert a new Setup Progress - () => frappe.tests.make('Setup Progress', [ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/setup/doctype/setup_progress/test_setup_progress.py b/erpnext/setup/doctype/setup_progress/test_setup_progress.py deleted file mode 100644 index 8926219143..0000000000 --- a/erpnext/setup/doctype/setup_progress/test_setup_progress.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -import unittest - -class TestSetupProgress(unittest.TestCase): - pass diff --git a/erpnext/setup/doctype/setup_progress_action/__init__.py b/erpnext/setup/doctype/setup_progress_action/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json b/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json deleted file mode 100644 index e9abcbcd1a..0000000000 --- a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2017-08-27 21:00:40.715360", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "action_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Action Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "action_doctype", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Action Doctype", - "length": 0, - "no_copy": 0, - "options": "DocType", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "action_document", - "fieldtype": "Dynamic Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Action Document", - "length": 0, - "no_copy": 0, - "options": "action_doctype", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "action_field", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Action Field", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "min_doc_count", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Min Doc Count", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "domains", - "fieldtype": "Code", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Domains", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "is_completed", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Is Completed", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 1, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2017-09-01 14:34:59.685730", - "modified_by": "Administrator", - "module": "Setup", - "name": "Setup Progress Action", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 1, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.py b/erpnext/setup/doctype/setup_progress_action/setup_progress_action.py deleted file mode 100644 index 24af94347e..0000000000 --- a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -from frappe.model.document import Document - -class SetupProgressAction(Document): - pass diff --git a/erpnext/utilities/onboarding_utils.py b/erpnext/utilities/onboarding_utils.py index 35f2b6a7ed..7b775a7b7d 100644 --- a/erpnext/utilities/onboarding_utils.py +++ b/erpnext/utilities/onboarding_utils.py @@ -7,19 +7,12 @@ import frappe, erpnext import json from frappe import _ from frappe.utils import flt -from erpnext.setup.doctype.setup_progress.setup_progress import update_domain_actions, get_domain_actions_state - -@frappe.whitelist() -def set_sales_target(args_data): - args = json.loads(args_data) - defaults = frappe.defaults.get_defaults() - frappe.db.set_value("Company", defaults.get("company"), "monthly_sales_target", args.get('monthly_sales_target')) @frappe.whitelist() def create_customers(args_data): args = json.loads(args_data) defaults = frappe.defaults.get_defaults() - for i in range(1,4): + for i in range(1,args.get('max_count')): customer = args.get("customer_name_" + str(i)) if customer: try: @@ -57,7 +50,7 @@ def create_letterhead(args_data): def create_suppliers(args_data): args = json.loads(args_data) defaults = frappe.defaults.get_defaults() - for i in range(1,4): + for i in range(1,args.get('max_count')): supplier = args.get("supplier_name_" + str(i)) if supplier: try: @@ -90,7 +83,7 @@ def create_contact(contact, party_type, party): def create_items(args_data): args = json.loads(args_data) defaults = frappe.defaults.get_defaults() - for i in range(1,4): + for i in range(1, args.get('max_count')): item = args.get("item_" + str(i)) if item: default_warehouse = "" @@ -141,7 +134,7 @@ def make_item_price(item, price_list_name, item_price): @frappe.whitelist() def create_program(args_data): args = json.loads(args_data) - for i in range(1,4): + for i in range(1,args.get('max_count')): if args.get("program_" + str(i)): program = frappe.new_doc("Program") program.program_code = args.get("program_" + str(i)) @@ -154,7 +147,7 @@ def create_program(args_data): @frappe.whitelist() def create_course(args_data): args = json.loads(args_data) - for i in range(1,4): + for i in range(1,args.get('max_count')): if args.get("course_" + str(i)): course = frappe.new_doc("Course") course.course_code = args.get("course_" + str(i)) @@ -167,7 +160,7 @@ def create_course(args_data): @frappe.whitelist() def create_instructor(args_data): args = json.loads(args_data) - for i in range(1,4): + for i in range(1,args.get('max_count')): if args.get("instructor_" + str(i)): instructor = frappe.new_doc("Instructor") instructor.instructor_name = args.get("instructor_" + str(i)) @@ -179,7 +172,7 @@ def create_instructor(args_data): @frappe.whitelist() def create_room(args_data): args = json.loads(args_data) - for i in range(1,4): + for i in range(1,args.get('max_count')): if args.get("room_" + str(i)): room = frappe.new_doc("Room") room.room_name = args.get("room_" + str(i)) @@ -195,7 +188,7 @@ def create_users(args_data): return args = json.loads(args_data) defaults = frappe.defaults.get_defaults() - for i in range(1,4): + for i in range(1,args.get('max_count')): email = args.get("user_email_" + str(i)) fullname = args.get("user_fullname_" + str(i)) if email: @@ -231,4 +224,4 @@ def create_users(args_data): emp.flags.ignore_mandatory = True emp.insert(ignore_permissions = True) -# Ennumerate the setup hooks you're going to need, apart from the slides +# Enumerate the setup hooks you're going to need, apart from the slides diff --git a/erpnext/utilities/user_progress.py b/erpnext/utilities/user_progress.py deleted file mode 100644 index 5cec3ca384..0000000000 --- a/erpnext/utilities/user_progress.py +++ /dev/null @@ -1,287 +0,0 @@ -# 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, erpnext -from frappe import _ -from erpnext.setup.doctype.setup_progress.setup_progress import get_action_completed_state - -def get_slide_settings(): - defaults = frappe.defaults.get_defaults() - domain = frappe.get_cached_value('Company', erpnext.get_default_company(), 'domain') - company = defaults.get("company") or '' - currency = defaults.get("currency") or '' - - doc = frappe.get_doc("Setup Progress") - item = [d for d in doc.get("actions") if d.action_name == "Set Sales Target"] - - if len(item): - item = item[0] - if not item.action_document: - item.action_document = company - doc.save() - - # Initial state of slides - return [ - frappe._dict( - action_name='Add Company', - title=_("Setup Company") if domain != 'Education' else _("Setup Institution"), - help=_('Setup your ' + ('company' if domain != 'Education' else 'institution') + ' and brand.'), - # image_src="/assets/erpnext/images/illustrations/shop.jpg", - fields=[], - done_state_title=_("You added " + company), - done_state_title_route=["Form", "Company", company], - help_links=[ - { - "label": _("Chart of Accounts"), - "url": ["https://erpnext.com/docs/user/manual/en/accounts/chart-of-accounts"] - }, - { - "label": _("Opening Balances"), - "video_id": "U5wPIvEn-0c" - } - ] - ), - frappe._dict( - action_name='Set Sales Target', - domains=('Manufacturing', 'Services', 'Retail', 'Distribution'), - title=_("Set a Target"), - help=_("Set a sales goal you'd like to achieve for your company."), - fields=[ - {"fieldtype":"Currency", "fieldname":"monthly_sales_target", - "label":_("Monthly Sales Target (" + currency + ")"), "reqd":1}, - ], - submit_method="erpnext.utilities.user_progress_utils.set_sales_target", - done_state_title=_("Go to " + company), - done_state_title_route=["Form", "Company", company], - help_links=[ - { - "label": _('Learn More'), - "url": ["https://erpnext.com/docs/user/manual/en/setting-up/setting-company-sales-goal"] - } - ] - ), - frappe._dict( - action_name='Add Customers', - domains=('Manufacturing', 'Services', 'Retail', 'Distribution'), - title=_("Add Customers"), - help=_("List a few of your customers. They could be organizations or individuals."), - fields=[ - {"fieldtype":"Section Break"}, - {"fieldtype":"Data", "fieldname":"customer", "label":_("Customer"), - "placeholder":_("Customer Name")}, - {"fieldtype":"Column Break"}, - {"fieldtype":"Data", "fieldname":"customer_contact", - "label":_("Contact Name"), "placeholder":_("Contact Name")} - ], - add_more=1, max_count=3, mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_customers", - done_state_title=_("Go to Customers"), - done_state_title_route=["List", "Customer"], - help_links=[ - { - "label": _('Learn More'), - "url": ["https://erpnext.com/docs/user/manual/en/CRM/customer.html"] - } - ] - ), - - frappe._dict( - action_name='Add Letterhead', - domains=('Manufacturing', 'Services', 'Retail', 'Distribution', 'Education'), - title=_("Add Letterhead"), - help=_("Upload your letter head (Keep it web friendly as 900px by 100px)"), - fields=[ - {"fieldtype":"Attach Image", "fieldname":"letterhead", - "is_private": 0, - "align": "center" - }, - ], - mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_letterhead", - done_state_title=_("Go to Letterheads"), - done_state_title_route=["List", "Letter Head"] - ), - - frappe._dict( - action_name='Add Suppliers', - domains=('Manufacturing', 'Services', 'Retail', 'Distribution'), - icon="fa fa-group", - title=_("Your Suppliers"), - help=_("List a few of your suppliers. They could be organizations or individuals."), - fields=[ - {"fieldtype":"Section Break"}, - {"fieldtype":"Data", "fieldname":"supplier", "label":_("Supplier"), - "placeholder":_("Supplier Name")}, - {"fieldtype":"Column Break"}, - {"fieldtype":"Data", "fieldname":"supplier_contact", - "label":_("Contact Name"), "placeholder":_("Contact Name")}, - ], - add_more=1, max_count=3, mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_suppliers", - done_state_title=_("Go to Suppliers"), - done_state_title_route=["List", "Supplier"], - help_links=[ - { - "label": _('Learn More'), - "url": ["https://erpnext.com/docs/user/manual/en/buying/supplier"] - }, - { - "label": _('Customers and Suppliers'), - "video_id": "zsrrVDk6VBs" - }, - ] - ), - frappe._dict( - action_name='Add Products', - domains=['Manufacturing', 'Services', 'Retail', 'Distribution'], - icon="fa fa-barcode", - title=_("Your Products or Services"), - help=_("List your products or services that you buy or sell."), - fields=[ - {"fieldtype":"Section Break", "show_section_border": 1}, - {"fieldtype":"Data", "fieldname":"item", "label":_("Item"), - "placeholder":_("A Product")}, - {"fieldtype":"Column Break"}, - {"fieldtype":"Select", "fieldname":"item_uom", "label":_("UOM"), - "options":[_("Unit"), _("Nos"), _("Box"), _("Pair"), _("Kg"), _("Set"), - _("Hour"), _("Minute"), _("Litre"), _("Meter"), _("Gram")], - "default": _("Unit"), "static": 1}, - {"fieldtype":"Column Break"}, - {"fieldtype":"Currency", "fieldname":"item_price", "label":_("Rate"), "static": 1} - ], - add_more=1, max_count=3, mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_items", - done_state_title=_("Go to Items"), - done_state_title_route=["List", "Item"], - help_links=[ - { - "label": _("Explore Sales Cycle"), - "video_id": "1eP90MWoDQM" - }, - ] - ), - - # Education slides begin - frappe._dict( - action_name='Add Programs', - domains=("Education"), - title=_("Program"), - help=_("Example: Masters in Computer Science"), - fields=[ - {"fieldtype":"Section Break", "show_section_border": 1}, - {"fieldtype":"Data", "fieldname":"program", "label":_("Program"), "placeholder": _("Program Name")}, - ], - add_more=1, max_count=3, mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_program", - done_state_title=_("Go to Programs"), - done_state_title_route=["List", "Program"], - help_links=[ - { - "label": _("Student Application"), - "video_id": "l8PUACusN3E" - }, - ] - - ), - frappe._dict( - action_name='Add Courses', - domains=["Education"], - title=_("Course"), - help=_("Example: Basic Mathematics"), - fields=[ - {"fieldtype":"Section Break", "show_section_border": 1}, - {"fieldtype":"Data", "fieldname":"course", "label":_("Course"), "placeholder": _("Course Name")}, - ], - add_more=1, max_count=3, mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_course", - done_state_title=_("Go to Courses"), - done_state_title_route=["List", "Course"], - help_links=[ - { - "label": _('Add Students'), - "route": ["List", "Student"] - } - ] - ), - frappe._dict( - action_name='Add Instructors', - domains=["Education"], - title=_("Instructor"), - help=_("People who teach at your organisation"), - fields=[ - {"fieldtype":"Section Break", "show_section_border": 1}, - {"fieldtype":"Data", "fieldname":"instructor", "label":_("Instructor"), "placeholder": _("Instructor Name")}, - ], - add_more=1, max_count=3, mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_instructor", - done_state_title=_("Go to Instructors"), - done_state_title_route=["List", "Instructor"], - help_links=[ - { - "label": _('Student Batches'), - "route": ["List", "Student Batch"] - } - ] - ), - frappe._dict( - action_name='Add Rooms', - domains=["Education"], - title=_("Room"), - help=_("Classrooms/ Laboratories etc where lectures can be scheduled."), - fields=[ - {"fieldtype":"Section Break", "show_section_border": 1}, - {"fieldtype":"Data", "fieldname":"room", "label":_("Room")}, - {"fieldtype":"Column Break"}, - {"fieldtype":"Int", "fieldname":"room_capacity", "label":_("Room Capacity"), "static": 1}, - ], - add_more=1, max_count=3, mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_room", - done_state_title=_("Go to Rooms"), - done_state_title_route=["List", "Room"], - help_links=[] - ), - # Education slides end - - frappe._dict( - action_name='Add Users', - title=_("Add Users"), - help=_("Add users to your organization, other than yourself."), - fields=[ - {"fieldtype":"Section Break"}, - {"fieldtype":"Data", "fieldname":"user_email", "label":_("Email ID"), - "placeholder":_("user@example.com"), "options": "Email", "static": 1}, - {"fieldtype":"Column Break"}, - {"fieldtype":"Data", "fieldname":"user_fullname", - "label":_("Full Name"), "static": 1}, - ], - add_more=1, max_count=3, mandatory_entry=1, - submit_method="erpnext.utilities.user_progress_utils.create_users", - done_state_title=_("Go to Users"), - done_state_title_route=["List", "User"], - help_links=[ - { - "label": _('Learn More'), - "url": ["https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions"] - }, - { - "label": _('Users and Permissions'), - "video_id": "8Slw1hsTmUI" - }, - ] - ) - ] - -def get_user_progress_slides(): - slides = [] - slide_settings = get_slide_settings() - - domains = frappe.get_active_domains() - for s in slide_settings: - if not s.domains or any(d in domains for d in s.domains): - s.mark_as_done_method = "erpnext.setup.doctype.setup_progress.setup_progress.set_action_completed_state" - s.done = get_action_completed_state(s.action_name) or 0 - slides.append(s) - - return slides -