Merge pull request #7980 from rohitwaghchaure/target_bounty_redesign
[Enhancement] POS Redesign and new features
This commit is contained in:
commit
d402829d17
@ -1,5 +1,6 @@
|
||||
{
|
||||
"allow_copy": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"autoname": "hash",
|
||||
@ -21,7 +22,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Applicable for User",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -50,7 +53,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Series",
|
||||
"length": 0,
|
||||
"no_copy": 1,
|
||||
@ -81,7 +86,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Update Stock",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -108,7 +115,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Warehouse",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -137,7 +146,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Campaign",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -165,7 +176,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -191,7 +204,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Customer",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -220,7 +235,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Company",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -238,6 +255,36 @@
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fieldname": "country",
|
||||
"fieldtype": "Read Only",
|
||||
"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": "Country",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "company.country",
|
||||
"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_on_submit": 0,
|
||||
"bold": 0,
|
||||
@ -249,7 +296,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Currency",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -278,7 +327,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Ignore Pricing Rule",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -305,7 +356,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Allow Delete",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -332,7 +385,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Allow user to edit Rate",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -359,7 +414,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -385,7 +442,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Sales Invoice Payment",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -413,7 +472,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -439,7 +500,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Item Groups",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -467,7 +530,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -493,7 +558,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Customer Groups",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -521,7 +588,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -548,7 +617,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Print Format",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -576,7 +647,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Letter Head",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -605,7 +678,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Print Heading",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -634,7 +709,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Terms and Conditions",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -663,7 +740,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldtype": "Column Break",
|
||||
@ -690,7 +769,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Territory",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -719,7 +800,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Price List",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -748,7 +831,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Apply Discount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -777,7 +862,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Apply Discount On",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -805,7 +892,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -832,7 +921,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Write Off Account",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -860,7 +951,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Write Off Cost Center",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -888,7 +981,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Account for Change Amount",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -916,7 +1011,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Taxes and Charges",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -945,7 +1042,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
@ -971,7 +1070,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Income Account",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -1001,7 +1102,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Expense Account",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -1028,7 +1131,9 @@
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Cost Center",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
@ -1047,18 +1152,18 @@
|
||||
"unique": 0
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"icon": "icon-cog",
|
||||
"idx": 1,
|
||||
"image_view": 0,
|
||||
"in_create": 0,
|
||||
"in_dialog": 0,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-12-28 15:14:59.411457",
|
||||
"modified": "2017-03-10 16:53:56.390210",
|
||||
"modified_by": "rohit@erpnext.com",
|
||||
"module": "Accounts",
|
||||
"name": "POS Profile",
|
||||
@ -1074,7 +1179,6 @@
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
@ -1095,7 +1199,6 @@
|
||||
"export": 0,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"is_custom": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
@ -1110,8 +1213,10 @@
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"title_field": "user",
|
||||
"track_changes": 0,
|
||||
"track_seen": 0
|
||||
}
|
@ -5,6 +5,7 @@ from __future__ import unicode_literals
|
||||
import frappe, json
|
||||
from frappe.utils import nowdate
|
||||
from erpnext.setup.utils import get_exchange_rate
|
||||
from frappe.core.doctype.communication.email import make
|
||||
from erpnext.stock.get_item_details import get_pos_profile
|
||||
from erpnext.accounts.party import get_party_account_currency
|
||||
from erpnext.controllers.accounts_controller import get_taxes_and_charges
|
||||
@ -25,13 +26,15 @@ def get_pos_data():
|
||||
update_multi_mode_option(doc, pos_profile)
|
||||
default_print_format = pos_profile.get('print_format') or "Point of Sale"
|
||||
print_template = frappe.db.get_value('Print Format', default_print_format, 'html')
|
||||
customers = get_customers_list(pos_profile)
|
||||
|
||||
return {
|
||||
'doc': doc,
|
||||
'default_customer': pos_profile.get('customer'),
|
||||
'items': get_items_list(pos_profile),
|
||||
'item_groups': get_item_group(pos_profile),
|
||||
'customers': get_customers_list(pos_profile),
|
||||
'customers': customers,
|
||||
'address': get_customers_address(customers),
|
||||
'serial_no_data': get_serial_no_data(pos_profile, doc.company),
|
||||
'batch_no_data': get_batch_no_data(),
|
||||
'tax_data': get_item_tax_data(),
|
||||
@ -60,6 +63,8 @@ def get_company_data(company):
|
||||
|
||||
def update_pos_profile_data(doc, pos_profile, company_data):
|
||||
doc.campaign = pos_profile.get('campaign')
|
||||
if not pos_profile.get('country'):
|
||||
pos_profile["country"] = company_data.country
|
||||
|
||||
doc.write_off_account = pos_profile.get('write_off_account') or \
|
||||
company_data.write_off_account
|
||||
@ -163,6 +168,19 @@ def get_customers_list(pos_profile):
|
||||
territory from tabCustomer where disabled = 0
|
||||
and {cond}""".format(cond=cond), tuple(customer_groups), as_dict=1) or {}
|
||||
|
||||
def get_customers_address(customers):
|
||||
customer_address = {}
|
||||
for data in customers:
|
||||
address = frappe.db.sql(""" select name, address_line1, address_line2, city, state,
|
||||
email_id, phone, fax, pincode from `tabAddress` where is_primary_address =1 and name in
|
||||
(select parent from `tabDynamic Link` where link_doctype = 'Customer' and link_name = %s
|
||||
and parenttype = 'Address')""", data.name, as_dict=1)
|
||||
if address:
|
||||
address_data = address[0]
|
||||
address_data.update({'full_name': data.customer_name})
|
||||
customer_address[data.name] = address_data
|
||||
return customer_address
|
||||
|
||||
def get_child_nodes(group_type, root):
|
||||
lft, rgt = frappe.db.get_value(group_type, root, ["lft", "rgt"])
|
||||
return frappe.db.sql_list(""" Select name from `tab{tab}` where
|
||||
@ -257,12 +275,18 @@ def get_pricing_rule_data(doc):
|
||||
return pricing_rules
|
||||
|
||||
@frappe.whitelist()
|
||||
def make_invoice(doc_list):
|
||||
def make_invoice(doc_list={}, email_queue_list={}, customers_list={}):
|
||||
if isinstance(doc_list, basestring):
|
||||
doc_list = json.loads(doc_list)
|
||||
|
||||
name_list = []
|
||||
if isinstance(email_queue_list, basestring):
|
||||
email_queue_list = json.loads(email_queue_list)
|
||||
|
||||
if isinstance(customers_list, basestring):
|
||||
customers_list = json.loads(customers_list)
|
||||
|
||||
customers = make_customer_and_address(customers_list)
|
||||
name_list = []
|
||||
for docs in doc_list:
|
||||
for name, doc in docs.items():
|
||||
if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
|
||||
@ -270,49 +294,72 @@ def make_invoice(doc_list):
|
||||
si_doc = frappe.new_doc('Sales Invoice')
|
||||
si_doc.offline_pos_name = name
|
||||
si_doc.update(doc)
|
||||
submit_invoice(si_doc, name)
|
||||
submit_invoice(si_doc, name, doc)
|
||||
name_list.append(name)
|
||||
else:
|
||||
name_list.append(name)
|
||||
|
||||
return name_list
|
||||
email_queue = make_email_queue(email_queue_list)
|
||||
return {
|
||||
'invoice': name_list,
|
||||
'email_queue': email_queue,
|
||||
'customers': customers
|
||||
}
|
||||
|
||||
def validate_records(doc):
|
||||
validate_customer(doc)
|
||||
validate_item(doc)
|
||||
|
||||
def validate_customer(doc):
|
||||
if not frappe.db.exists('Customer', doc.get('customer')):
|
||||
def make_customer_and_address(customers):
|
||||
customer_list = []
|
||||
for name, data in customers.items():
|
||||
if not frappe.db.exists('Customer', name):
|
||||
name = add_customer(name)
|
||||
data = json.loads(data)
|
||||
make_address(data, name)
|
||||
customer_list.append(name)
|
||||
return customer_list
|
||||
|
||||
def add_customer(name):
|
||||
customer_doc = frappe.new_doc('Customer')
|
||||
customer_doc.customer_name = doc.get('customer')
|
||||
customer_doc.customer_name = name
|
||||
customer_doc.customer_type = 'Company'
|
||||
customer_doc.customer_group = frappe.db.get_single_value('Selling Settings', 'customer_group')
|
||||
customer_doc.territory = frappe.db.get_single_value('Selling Settings', 'territory')
|
||||
customer_doc.flags.ignore_mandatory = True
|
||||
customer_doc.save(ignore_permissions = True)
|
||||
frappe.db.commit()
|
||||
doc['customer'] = customer_doc.name
|
||||
if doc.get('contact_details'):
|
||||
args = json.loads(doc.get("contact_details"))
|
||||
make_address(doc, args, customer_doc.name)
|
||||
|
||||
def make_address(doc, args, customer):
|
||||
if args.get("address_line1"):
|
||||
def make_address(args, customer):
|
||||
if args.get('name'):
|
||||
address = frappe.get_doc('Address', args.get('name'))
|
||||
else:
|
||||
address = frappe.new_doc('Address')
|
||||
address.address_line1 = args.get('address_line1')
|
||||
address.address_line2 = args.get('address_line2')
|
||||
address.city = args.get('city')
|
||||
address.state = args.get('state')
|
||||
address.zip_code = args.get('zip_code')
|
||||
address.email_id = args.get('email_id')
|
||||
address.flags.ignore_mandatory = True
|
||||
address.country = frappe.db.get_value('Company', doc.get('company'), 'country')
|
||||
address.country = frappe.db.get_value('Company', args.get('company'), 'country')
|
||||
address.append('links',{
|
||||
'link_doctype': 'Customer',
|
||||
'link_name': customer
|
||||
})
|
||||
|
||||
address.is_primary_address = 1
|
||||
address.is_shipping_address = 1
|
||||
address.update(args)
|
||||
address.save(ignore_permissions = True)
|
||||
frappe.db.commit()
|
||||
|
||||
def make_email_queue(email_queue):
|
||||
name_list = []
|
||||
for key, data in email_queue.items():
|
||||
name = frappe.db.get_value('Sales Invoice', {'offline_pos_name': key}, 'name')
|
||||
data = json.loads(data)
|
||||
sender = frappe.session.user
|
||||
print_format = "POS Invoice"
|
||||
attachments = [frappe.attach_print('Sales Invoice', name, print_format= print_format)]
|
||||
|
||||
make(subject = data.get('subject'), content = data.get('content'), recipients = data.get('recipients'),
|
||||
sender=sender,attachments = attachments, send_email=True,
|
||||
doctype='Sales Invoice', name=name)
|
||||
name_list.append(key)
|
||||
|
||||
return name_list
|
||||
|
||||
def validate_item(doc):
|
||||
for item in doc.get('items'):
|
||||
@ -328,7 +375,8 @@ def validate_item(doc):
|
||||
item_doc.save(ignore_permissions=True)
|
||||
frappe.db.commit()
|
||||
|
||||
def submit_invoice(si_doc, name):
|
||||
|
||||
def submit_invoice(si_doc, name, doc):
|
||||
try:
|
||||
si_doc.insert()
|
||||
si_doc.submit()
|
||||
|
@ -558,7 +558,7 @@ class TestSalesInvoice(unittest.TestCase):
|
||||
{'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 330}]
|
||||
|
||||
invoice_data = [{'09052016142': pos}]
|
||||
si = make_invoice(invoice_data)
|
||||
si = make_invoice(invoice_data).get('invoice')
|
||||
self.assertEquals(si[0], '09052016142')
|
||||
|
||||
sales_invoice = frappe.get_all('Sales Invoice', fields =["*"], filters = {'offline_pos_name': '09052016142', 'docstatus': 1})
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -20,8 +20,11 @@
|
||||
"public/js/controllers/transaction.js",
|
||||
"public/js/pos/pos.html",
|
||||
"public/js/pos/pos_bill_item.html",
|
||||
"public/js/pos/pos_bill_item_new.html",
|
||||
"public/js/pos/pos_selected_item.html",
|
||||
"public/js/pos/pos_item.html",
|
||||
"public/js/pos/pos_tax_row.html",
|
||||
"public/js/pos/customer_toolbar.html",
|
||||
"public/js/pos/pos_invoice_list.html",
|
||||
"public/js/payment/pos_payment.html",
|
||||
"public/js/payment/payment_details.html",
|
||||
|
@ -12,113 +12,11 @@
|
||||
height: 32px;
|
||||
margin: -10px auto;
|
||||
}
|
||||
/* pos */
|
||||
.pos-item-area {
|
||||
padding: 0px 10px;
|
||||
}
|
||||
.pos-item-wrapper {
|
||||
padding: 5px;
|
||||
}
|
||||
.pos-item {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
cursor: pointer;
|
||||
padding: 5px;
|
||||
padding-bottom: 15px;
|
||||
border: 1px solid #d1d8dd;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.pos-item-text {
|
||||
padding: 0px 5px;
|
||||
}
|
||||
.pos-item .item-code {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.pos-item .no-image {
|
||||
background-color: #fafbfc;
|
||||
border: 1px dashed #d1d8dd;
|
||||
}
|
||||
.pos-item-image {
|
||||
width: 100%;
|
||||
height: 0px;
|
||||
padding: 50% 0;
|
||||
text-align: center;
|
||||
line-height: 0;
|
||||
color: #d1d8dd;
|
||||
font-size: 30px;
|
||||
background-size: contain;
|
||||
border: 1px solid transparent;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.pos-item-area {
|
||||
border: 1px solid #d1d8dd;
|
||||
border-top: none;
|
||||
}
|
||||
.pos-item-toolbar {
|
||||
padding: 10px 0px;
|
||||
border-bottom: 1px solid #d1d8dd;
|
||||
}
|
||||
.item-list-area {
|
||||
padding: 15px 0px;
|
||||
overflow-y: scroll;
|
||||
height: calc(100vh - 162px);
|
||||
}
|
||||
.pos-toolbar,
|
||||
.pos-bill-toolbar {
|
||||
padding: 10px 0px;
|
||||
height: 51px;
|
||||
}
|
||||
.pos-item-toolbar .form-group {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.pos-bill-wrapper {
|
||||
border: 1px solid #d1d8dd;
|
||||
border-top: none;
|
||||
margin-right: -1px;
|
||||
}
|
||||
.pos-bill {
|
||||
border-top: 1px solid #d1d8dd;
|
||||
margin-left: -15px;
|
||||
margin-right: -15px;
|
||||
}
|
||||
.pos-bill-row {
|
||||
margin: 0px;
|
||||
padding: 7px 0px;
|
||||
border-top: 1px solid #d1d8dd;
|
||||
}
|
||||
.pos-bill-header {
|
||||
border: none !important;
|
||||
background-color: #f5f7fa;
|
||||
}
|
||||
.pos-item-qty {
|
||||
display: inline-block;
|
||||
}
|
||||
.pos-qty-row > div {
|
||||
padding: 5px 0px;
|
||||
}
|
||||
.pos-qty-btn {
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
font-size: 120%;
|
||||
}
|
||||
.pos .search-area .form-group {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
.pos .tax-table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.erpnext-icon {
|
||||
width: 24px;
|
||||
ackmargin-right: 0px;
|
||||
margin-right: 0px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
.pos .discount-amount-area .discount-field-col {
|
||||
padding-left: 0px;
|
||||
}
|
||||
.pos .discount-amount-area .input-group {
|
||||
margin-top: 2px;
|
||||
}
|
||||
.dashboard-list-item {
|
||||
background-color: inherit;
|
||||
padding: 5px 0px;
|
||||
@ -130,91 +28,6 @@
|
||||
.dashboard-list-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
.payment-toolbar .row {
|
||||
width: 323px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.payment-mode {
|
||||
cursor: pointer;
|
||||
font-family: sans-serif;
|
||||
font-size: 15px;
|
||||
}
|
||||
.pos-payment-row .col-xs-6 {
|
||||
padding: 15px;
|
||||
}
|
||||
.pos-payment-row {
|
||||
border-bottom: 1px solid #d1d8dd;
|
||||
margin: 2px 0px 5px 0px;
|
||||
height: 60px;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.pos-payment-row:hover,
|
||||
.pos-keyboard-key:hover {
|
||||
background-color: #FAFBFC;
|
||||
cursor: pointer;
|
||||
}
|
||||
.pos-keyboard-key,
|
||||
.delete-btn {
|
||||
border: 1px solid #d1d8dd;
|
||||
height: 85px;
|
||||
width: 85px;
|
||||
margin: 10px 10px;
|
||||
font-size: 24px;
|
||||
font-weight: 200;
|
||||
background-color: #FDFDFD;
|
||||
border-color: #e8e8e8;
|
||||
}
|
||||
.multimode-payments {
|
||||
padding-left: 30px;
|
||||
}
|
||||
.payment-toolbar {
|
||||
padding-right: 30px;
|
||||
}
|
||||
.list-row-head.pos-invoice-list {
|
||||
border-top: 1px solid #d1d8dd;
|
||||
}
|
||||
body[data-route="pos"] .modal-dialog {
|
||||
width: 750px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
body[data-route="pos"] .modal-dialog {
|
||||
width: auto;
|
||||
}
|
||||
body[data-route="pos"] .modal-dialog .modal-content {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.amount-row h3 {
|
||||
font-size: 15px;
|
||||
}
|
||||
.pos-keyboard-key,
|
||||
.delete-btn {
|
||||
height: 50px;
|
||||
}
|
||||
.multimode-payments {
|
||||
padding-left: 15px;
|
||||
}
|
||||
.payment-toolbar {
|
||||
padding-right: 15px;
|
||||
}
|
||||
}
|
||||
.amount-label {
|
||||
font-size: 16px;
|
||||
}
|
||||
.selected-payment-mode {
|
||||
background-color: #FAFBFC;
|
||||
cursor: pointer;
|
||||
}
|
||||
.pos-invoice-list {
|
||||
padding: 15px 10px;
|
||||
}
|
||||
.write_off_amount,
|
||||
.change_amount {
|
||||
margin: 15px;
|
||||
width: 130px;
|
||||
}
|
||||
.frappe-control[data-fieldname='result_html'] {
|
||||
overflow: scroll;
|
||||
}
|
||||
@ -237,3 +50,281 @@ body[data-route="pos"] .modal-dialog {
|
||||
.assessment-result-tool .score {
|
||||
text-align: right;
|
||||
}
|
||||
/* pos */
|
||||
body[data-route="pos"] .pos-bill-toolbar {
|
||||
padding: 10px 0px;
|
||||
height: 51px;
|
||||
}
|
||||
body[data-route="pos"] .pos-bill-item:hover,
|
||||
body[data-route="pos"] .list-customers-table > .pos-list-row:hover {
|
||||
background-color: #f5f7fa;
|
||||
cursor: pointer;
|
||||
}
|
||||
body[data-route="pos"] .pos-item-qty {
|
||||
display: inline-block;
|
||||
}
|
||||
body[data-route="pos"] .pos-qty-row > div {
|
||||
padding: 5px 0px;
|
||||
}
|
||||
body[data-route="pos"] .pos-qty-btn {
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
font-size: 120%;
|
||||
}
|
||||
body[data-route="pos"] .search-area .form-group {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
body[data-route="pos"] .tax-table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
body[data-route="pos"] .discount-field-col {
|
||||
padding-left: 24px;
|
||||
}
|
||||
body[data-route="pos"] .discount-amount-area .input-group:first-child {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
body[data-route="pos"] .payment-toolbar .row {
|
||||
width: 323px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
body[data-route="pos"] .payment-mode {
|
||||
cursor: pointer;
|
||||
font-family: sans-serif;
|
||||
font-size: 15px;
|
||||
}
|
||||
body[data-route="pos"] .pos-payment-row .col-xs-6 {
|
||||
padding: 15px;
|
||||
}
|
||||
body[data-route="pos"] .pos-payment-row {
|
||||
border-bottom: 1px solid #d1d8dd;
|
||||
margin: 2px 0px 5px 0px;
|
||||
height: 60px;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
body[data-route="pos"] .pos-payment-row:hover,
|
||||
body[data-route="pos"] .pos-keyboard-key:hover {
|
||||
background-color: #FAFBFC;
|
||||
cursor: pointer;
|
||||
}
|
||||
body[data-route="pos"] .pos-keyboard-key,
|
||||
body[data-route="pos"] .delete-btn {
|
||||
border: 1px solid #d1d8dd;
|
||||
height: 85px;
|
||||
width: 85px;
|
||||
margin: 10px 10px;
|
||||
font-size: 24px;
|
||||
font-weight: 200;
|
||||
background-color: #FDFDFD;
|
||||
border-color: #e8e8e8;
|
||||
}
|
||||
body[data-route="pos"] .numeric-keypad {
|
||||
border: 1px solid #d1d8dd;
|
||||
height: 69px;
|
||||
width: 69px;
|
||||
font-size: 20px;
|
||||
font-weight: 200;
|
||||
background-color: #FDFDFD;
|
||||
border-color: #e8e8e8;
|
||||
margin-left: -4px;
|
||||
}
|
||||
body[data-route="pos"] .pos-pay {
|
||||
height: 69px;
|
||||
width: 69px;
|
||||
font-size: 17px;
|
||||
font-weight: 200;
|
||||
margin-left: -4px;
|
||||
}
|
||||
body[data-route="pos"] .numeric-keypad {
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
font-size: 20px;
|
||||
font-weight: 200;
|
||||
border-radius: 0;
|
||||
background-color: #fff;
|
||||
margin-left: -4px;
|
||||
}
|
||||
body[data-route="pos"] .numeric_keypad {
|
||||
margin-left: -15px;
|
||||
}
|
||||
body[data-route="pos"] .numeric_keypad > .row > button {
|
||||
border: none;
|
||||
border-right: 1px solid #d1d8dd;
|
||||
border-bottom: 1px solid #d1d8dd;
|
||||
}
|
||||
body[data-route="pos"] .numeric_keypad > .row > button:first-child {
|
||||
border-left: 1px solid #d1d8dd;
|
||||
}
|
||||
body[data-route="pos"] .numeric_keypad > .row:first-child > button {
|
||||
border-top: 1px solid #d1d8dd;
|
||||
}
|
||||
body[data-route="pos"] .pos-pay {
|
||||
background-color: #5E64FF;
|
||||
border: none;
|
||||
}
|
||||
body[data-route="pos"] .multimode-payments {
|
||||
padding-left: 30px;
|
||||
}
|
||||
body[data-route="pos"] .payment-toolbar {
|
||||
padding-right: 30px;
|
||||
}
|
||||
body[data-route="pos"] .list-row-head.pos-invoice-list {
|
||||
border-top: 1px solid #d1d8dd;
|
||||
}
|
||||
body[data-route="pos"] .modal-dialog {
|
||||
width: 750px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
body[data-route="pos"] .modal-dialog {
|
||||
width: auto;
|
||||
}
|
||||
body[data-route="pos"] .modal-dialog .modal-content {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
body[data-route="pos"] .amount-row h3 {
|
||||
font-size: 15px;
|
||||
}
|
||||
body[data-route="pos"] .pos-keyboard-key,
|
||||
body[data-route="pos"] .delete-btn {
|
||||
height: 50px;
|
||||
}
|
||||
body[data-route="pos"] .multimode-payments {
|
||||
padding-left: 15px;
|
||||
}
|
||||
body[data-route="pos"] .payment-toolbar {
|
||||
padding-right: 15px;
|
||||
}
|
||||
}
|
||||
body[data-route="pos"] .amount-label {
|
||||
font-size: 16px;
|
||||
}
|
||||
body[data-route="pos"] .selected-payment-mode {
|
||||
background-color: #FAFBFC;
|
||||
cursor: pointer;
|
||||
}
|
||||
body[data-route="pos"] .pos-invoice-list {
|
||||
padding: 15px 10px;
|
||||
}
|
||||
body[data-route="pos"] .write_off_amount,
|
||||
body[data-route="pos"] .change_amount {
|
||||
margin: 15px;
|
||||
width: 130px;
|
||||
}
|
||||
body[data-route="pos"] .pos-list-row {
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
padding: 9px 15px;
|
||||
font-size: 12px;
|
||||
margin: 0px;
|
||||
border-bottom: 1px solid #d1d8dd;
|
||||
}
|
||||
body[data-route="pos"] .pos-list-row .cell {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
}
|
||||
body[data-route="pos"] .pos-list-row .cell.price-cell {
|
||||
width: 50%;
|
||||
}
|
||||
body[data-route="pos"] .pos-list-row .subject {
|
||||
width: 40%;
|
||||
}
|
||||
body[data-route="pos"] .pos-list-row .list-row-checkbox,
|
||||
body[data-route="pos"] .pos-list-row .list-select-all {
|
||||
margin-right: 7px;
|
||||
}
|
||||
body[data-route="pos"] .pos-bill-header {
|
||||
background-color: #f5f7fa;
|
||||
border: 1px solid #d1d8dd;
|
||||
padding: 13px 15px;
|
||||
}
|
||||
body[data-route="pos"] .pos-list-row.active {
|
||||
background-color: #fffce7;
|
||||
}
|
||||
body[data-route="pos"] .totals-area {
|
||||
border-right: 1px solid #d1d8dd;
|
||||
border-left: 1px solid #d1d8dd;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
body[data-route="pos"] .tax-area .pos-list-row {
|
||||
border: none;
|
||||
}
|
||||
body[data-route="pos"] .item-cart-items {
|
||||
height: calc(100vh - 526px);
|
||||
overflow: auto;
|
||||
border: 1px solid #d1d8dd;
|
||||
border-top: none;
|
||||
}
|
||||
body[data-route="pos"] .no-items-message {
|
||||
min-height: 200px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
}
|
||||
body[data-route="pos"] .pos-list-row:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
body[data-route="pos"] .form-section-heading {
|
||||
padding: 0;
|
||||
}
|
||||
body[data-route="pos"] .item-list {
|
||||
border: 1px solid #d1d8dd;
|
||||
border-top: none;
|
||||
max-height: calc(100vh - 190px);
|
||||
overflow: auto;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
body[data-route="pos"] .item-list {
|
||||
max-height: initial;
|
||||
}
|
||||
}
|
||||
body[data-route="pos"] .item-list .image-field {
|
||||
height: 140px;
|
||||
}
|
||||
body[data-route="pos"] .item-list .pos-item-wrapper {
|
||||
position: relative;
|
||||
}
|
||||
body[data-route="pos"] .item-list .price-info {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
margin: 0 0 15px 15px;
|
||||
background-color: rgba(141, 153, 166, 0.6);
|
||||
padding: 5px 9px;
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
}
|
||||
body[data-route="pos"] .pos-bill-toolbar {
|
||||
margin-top: 10px;
|
||||
}
|
||||
body[data-route="pos"] .search-item .form-group {
|
||||
margin: 0;
|
||||
}
|
||||
body[data-route="pos"] .item-list-area .pos-bill-header {
|
||||
padding: 5px;
|
||||
padding-left: 15px;
|
||||
}
|
||||
body[data-route="pos"] .pos-selected-item-action > .pos-list-row {
|
||||
border: none;
|
||||
}
|
||||
body[data-route="pos"] .edit-customer-btn {
|
||||
position: absolute;
|
||||
right: 57px;
|
||||
top: 15px;
|
||||
z-index: 100;
|
||||
}
|
||||
body[data-route="pos"] .btn-more {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
background-color: #fafbfc;
|
||||
min-height: 200px;
|
||||
}
|
||||
body[data-route="pos"] .collapse-btn {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
16
erpnext/public/js/pos/customer_toolbar.html
Normal file
16
erpnext/public/js/pos/customer_toolbar.html
Normal file
@ -0,0 +1,16 @@
|
||||
<div class="pos-bill-toolbar col-xs-9" style="display: flex; width: 70%;">
|
||||
<div class="party-area" style="flex: 1;">
|
||||
<span class="edit-customer-btn text-muted" style="display: inline;">
|
||||
<a class="btn-open no-decoration" title="Edit Customer">
|
||||
<i class="octicon octicon-pencil"></i>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<button class="btn btn-default list-customers-btn" style="margin-left: 12px">
|
||||
<i class="octicon octicon-organization"></i>
|
||||
</button>
|
||||
</button> {% if (allow_delete) { %}
|
||||
<button class="btn btn-default btn-danger" style="margin: 0 5px 0 5px">
|
||||
<i class="octicon octicon-trashcan"></i>
|
||||
</button> {% } %}
|
||||
</div>
|
@ -1,85 +1,126 @@
|
||||
<div class="pos">
|
||||
<div class="row">
|
||||
<div class="col-sm-6 pos-bill-wrapper">
|
||||
<div class="pos-bill-toolbar" style="display: flex;">
|
||||
<div class="party-area" style="flex: 1;"></div>
|
||||
<button class="btn btn-default list-customers-btn" style="margin: 0 5px 0 15px;">
|
||||
<i class="fa fa-list"></i>
|
||||
</button>
|
||||
<button class="btn btn-default add-customer-btn">
|
||||
<i class="fa fa-plus"></i>
|
||||
</button>
|
||||
{% if (allow_delete) { %}
|
||||
<button class="btn btn-default btn-danger" style="margin: 0 5px 0 5px;display:none">
|
||||
<i class="octicon octicon-trashcan"></i>
|
||||
</button>
|
||||
{% } %}
|
||||
</div>
|
||||
<div class="col-sm-5 pos-bill-wrapper">
|
||||
<div class="col-sm-12"><h6 class="form-section-heading uppercase">{{ __("Item Cart") }}</h6></div>
|
||||
<div class="pos-bill">
|
||||
<div class="item-cart">
|
||||
<div class="row pos-bill-row pos-bill-header">
|
||||
<div class="col-xs-4"><h6>{%= __("Item") %}</h6></div>
|
||||
<div class="col-xs-3"><h6 class="text-right">{%= __("Quantity") %}</h6></div>
|
||||
<div class="col-xs-2"><h6 class="text-right">{%= __("Discount") %}</h6></div>
|
||||
<div class="col-xs-3"><h6 class="text-right">{%= __("Rate") %}</h6></div>
|
||||
<div class="pos-list-row pos-bill-header text-muted h6">
|
||||
<span class="cell subject">
|
||||
<!--<input class="list-select-all" type="checkbox" title="{%= __("Select All") %}">-->
|
||||
{{ __("Item Name")}}
|
||||
</span>
|
||||
<span class="cell text-right">{{ __("Quantity") }}</span>
|
||||
<span class="cell text-right">{{ __("Discount") }}</span>
|
||||
<span class="cell text-right">{{ __("Rate") }}</span>
|
||||
</div>
|
||||
<div class="item-cart-items">
|
||||
<div class="no-items-message text-extra-muted">
|
||||
<span class="text-center">
|
||||
<i class="fa fa-2x fa-shopping-cart"></i>
|
||||
<p>Tap items to add them here</p>
|
||||
</span>
|
||||
</div>
|
||||
<div class="items">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="items"></div>
|
||||
</div>
|
||||
<div class="totals-area">
|
||||
<div class="row pos-bill-row net-total-area">
|
||||
<div class="col-xs-6"><h6 class="text-muted">{%= __("Net Total") %}</h6></div>
|
||||
<div class="col-xs-6"><h6 class="net-total text-right"></h6></div>
|
||||
<div class="pos-list-row net-total-area">
|
||||
<div class="cell"></div>
|
||||
<div class="cell text-right">{%= __("Net Total") %}</div>
|
||||
<div class="cell price-cell bold net-total text-right"></div>
|
||||
</div>
|
||||
<div class="row pos-bill-row tax-area hide">
|
||||
<div class="col-xs-12 text-muted">
|
||||
<h6>{%= __("Taxes") %}</h6>
|
||||
<div class="tax-table small"></div>
|
||||
<div class="pos-list-row tax-area">
|
||||
<div class="cell"></div>
|
||||
<div class="cell text-right">{%= __("Taxes") %}</div>
|
||||
<div class="cell price-cell text-right tax-table">
|
||||
</div>
|
||||
</div>
|
||||
{% if (apply_discount_on) { %}
|
||||
<div class="row pos-bill-row discount-amount-area">
|
||||
<div class="col-xs-6"><h6 class="text-muted">{%= __("Discount") %}</h6></div>
|
||||
<div class="col-xs-3 discount-field-col">
|
||||
<div class="pos-list-row discount-amount-area">
|
||||
<div class="cell"></div>
|
||||
<div class="cell text-right">{%= __("Discount") %}</div>
|
||||
<div class="cell price-cell discount-field-col">
|
||||
<div class="input-group input-group-sm">
|
||||
<span class="input-group-addon">%</span>
|
||||
<input type="text" class="form-control discount-percentage text-right">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 discount-field-col">
|
||||
<div class="input-group input-group-sm">
|
||||
<span class="input-group-addon">{%= get_currency_symbol(currency) %}</span>
|
||||
<input type="text" class="form-control discount-amount text-right"
|
||||
placeholder="{%= 0.00 %}">
|
||||
<input type="text" class="form-control discount-amount text-right" placeholder="{%= 0.00 %}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% } %}
|
||||
<div class="row pos-bill-row grand-total-area">
|
||||
<div class="col-xs-6"><h6>{%= __("Grand Total") %}</h6></div>
|
||||
<div class="col-xs-6"><h6 class="grand-total text-right"></h6></div>
|
||||
<div class="pos-list-row grand-total-area collapse-btn" style="border-bottom:1px solid #d1d8dd;">
|
||||
<div class="cell">
|
||||
<a class="">
|
||||
<i class="octicon octicon-chevron-down"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="cell text-right bold">{%= __("Grand Total") %}</div>
|
||||
<div class="cell price-cell grand-total text-right lead"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-customers">
|
||||
<div class="row" style="margin-top: 30px">
|
||||
<div class="col-sm-6 selected-item">
|
||||
|
||||
</div>
|
||||
<div class="col-xs-6 numeric_keypad hidden-xs" style="display:none">
|
||||
{% var chartData = ["Qty", "Disc", "Price"] %} {% for(var i=0; i
|
||||
<3; i++) { %} <div class="row text-right">
|
||||
{% for(var j=i*3; j
|
||||
<(i+1)*3; j++) { %} <button type="button" class="btn btn-default numeric-keypad" val="{{j+1}}">{{j+1}}</button>
|
||||
{% } %}
|
||||
<button type="button" id="pos-item-{{ chartData[i].toLowerCase() }}" class="btn text-center btn-default numeric-keypad pos-operation">{{ chartData[i] }}</button>
|
||||
</div>
|
||||
<div class="col-sm-6 pos-items-section">
|
||||
{% } %}
|
||||
<div class="row text-right">
|
||||
<button type="button" class="btn btn-default numeric-keypad numeric-del">Del</button>
|
||||
<button type="button" class="btn btn-default numeric-keypad" val="0">0</button>
|
||||
<button type="button" class="btn btn-default numeric-keypad" val=".">.</button>
|
||||
<button type="button" class="btn btn-primary numeric-keypad pos-pay">Pay</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-5 list-customers">
|
||||
<div class="col-sm-12"><h6 class="form-section-heading uppercase">{{ __("Customers in Queue") }}</h6></div>
|
||||
<div class="pos-list-row pos-bill-header">
|
||||
<div class="cell subject"><input class="list-select-all" type="checkbox">{{ __("Customer") }}</div>
|
||||
<div class="cell text-left">{{ __("Status") }}</div>
|
||||
<div class="cell text-right">{{ __("Amount") }}</div>
|
||||
<div class="cell text-right">{{ __("Grand Total") }}</div>
|
||||
</div>
|
||||
<div class="list-customers-table border-left border-right border-bottom">
|
||||
<div class="no-items-message text-extra-muted">
|
||||
<span class="text-center">
|
||||
<i class="fa fa-2x fa-user"></i>
|
||||
<p>No Customers yet!</p>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-7 pos-items-section">
|
||||
<div class="col-sm-12"><h6 class="form-section-heading uppercase">{{ __("Stock Items") }}</h6></div>
|
||||
<div class="row pos-item-area">
|
||||
|
||||
</div>
|
||||
<span id="customer-results" style="color:#68a;"></span>
|
||||
<div class="row pos-item-toolbar">
|
||||
<div class="search-item-group col-xs-5"></div>
|
||||
<div class="search-item col-xs-7"></div>
|
||||
</div>
|
||||
<div class="item-list-area" style="auto">
|
||||
<div class="app-listing item-list"></ul>
|
||||
<div class="item-list-area">
|
||||
<div class="pos-list-row pos-bill-header text-muted h6">
|
||||
<div class="cell subject search-item-group">
|
||||
<div class="dropdown">
|
||||
<a class="text-muted dropdown-toggle" data-toggle="dropdown"><span class="dropdown-text">All Item Groups</span><i class="caret"></i></a>
|
||||
<ul class="dropdown-menu">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="text-right list-paging-area">
|
||||
<button class="btn btn-default btn-more btn-sm" style="margin:5px 20px">{{ __("More") }}</button>
|
||||
<div class="cell search-item"></div>
|
||||
</div>
|
||||
<div class="app-listing item-list image-view-container">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -18,13 +18,13 @@
|
||||
</div>
|
||||
<div class="col-xs-2 text-right">
|
||||
<div class="row input-sm">
|
||||
<input type="tel" value="{%= discount_percentage %}" class="form-control text-right pos-item-discount">
|
||||
<input type="tel" value="{%= discount_percentage %}" class="form-control text-right pos-item-disc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-3 text-right">
|
||||
<div class="text-muted" style="margin-top: 5px;">
|
||||
{% if(enabled) { %}
|
||||
<input type="tel" value="{%= rate %}" class="form-control input-sm pos-item-rate text-right">
|
||||
<input type="tel" value="{%= rate %}" class="form-control input-sm pos-item-price text-right">
|
||||
{% } else { %}
|
||||
<h6>{%= format_currency(rate) %}</h6>
|
||||
{% } %}
|
||||
|
9
erpnext/public/js/pos/pos_bill_item_new.html
Normal file
9
erpnext/public/js/pos/pos_bill_item_new.html
Normal file
@ -0,0 +1,9 @@
|
||||
<div class="pos-list-row pos-bill-item" data-item-code="{{ item_code }}">
|
||||
<div class="cell subject">
|
||||
<!--<input class="list-row-checkbox" type="checkbox" data-name="{{item_code}}">-->
|
||||
<a class="grey list-id" title="{{ item_name }}">{{ strip_html(__(item_name)) || item_code }}</a>
|
||||
</div>
|
||||
<div class="cell text-right">{%= qty %}</div>
|
||||
<div class="cell text-right">{%= discount_percentage %}</div>
|
||||
<div class="cell text-right">{%= format_currency(rate) %}</div>
|
||||
</div>
|
@ -1,7 +1,9 @@
|
||||
<div class="row list-row pos-invoice-list" invoice-name = "{{name}}">
|
||||
<div class="col-xs-1"><input class="list-delete" type="checkbox"></div>
|
||||
<div class="list-column col-xs-3">{%= customer %}</div>
|
||||
<div class="list-column col-xs-2 text-left"><span class="indicator {{data.indicator}}">{{ data.status }}</span></div>
|
||||
<div class="list-column col-xs-3 text-right">{%= paid_amount %}</div>
|
||||
<div class="list-column col-xs-3 text-right">{%= grand_total %}</div>
|
||||
<div class="pos-list-row" invoice-name = "{{name}}">
|
||||
<div class="list-column cell subject" invoice-name = "{{name}}">
|
||||
<input class="list-delete text-left" type="checkbox" style = "margin-right:5px">
|
||||
<a class="grey list-id text-left customer-row" title="{{ customer }}">{%= customer %}</a>
|
||||
</div>
|
||||
<div class="list-column cell text-left customer-row"><span class="indicator {{data.indicator}}">{{ data.status }}</span></div>
|
||||
<div class="list-column cell text-right customer-row">{%= paid_amount %}</div>
|
||||
<div class="list-column cell text-right customer-row">{%= grand_total %}</div>
|
||||
</div>
|
||||
|
@ -1,13 +1,32 @@
|
||||
<div class="pos-item-wrapper col-xs-3">
|
||||
<div class="pos-item" data-item-code="{%= item_code %}" title="{%= item_name || item_code %}">
|
||||
<div class="pos-item-image"
|
||||
style="{% if (item_image) { %} background-image: {{ item_image }} {% }
|
||||
else { %} background-color: {{ color }} {% } %}">
|
||||
{% if (!item_image) { %}{{ abbr }}{% } %}
|
||||
</div>
|
||||
<div class="pos-item-text">
|
||||
<h6 class="item-code ellipsis">{%= item_name ? (item_name + " (" + item_code + ")") : item_code %}</h6>
|
||||
<div class="small ellipsis">{%= item_price %}</div>
|
||||
<div class="pos-item-wrapper image-view-item" data-item-code="{{item_code}}">
|
||||
<div class="image-view-header doclist-row">
|
||||
<div class="list-value">
|
||||
<a class="grey list-id" data-name="{{item_code}}" title="{{ item_name || item_code}}">{{item_name || item_code}}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="image-view-body">
|
||||
<a data-item-code="{{ item_code }}"
|
||||
title="{{ item_name || item_code }}"
|
||||
>
|
||||
<div class="image-field"
|
||||
style="
|
||||
{% if (!item_image) { %}
|
||||
background-color: #fafbfc;
|
||||
{% } %}
|
||||
border: 0px;"
|
||||
>
|
||||
{% if (!item_image) { %}
|
||||
<span class="placeholder-text">
|
||||
{%= frappe.get_abbr(item_name || item_code) %}
|
||||
</span>
|
||||
{% } %}
|
||||
{% if (item_image) { %}
|
||||
<img src="{{ item_image }}" alt="{{item_name || item_code}}">
|
||||
{% } %}
|
||||
</div>
|
||||
<span class="price-info">
|
||||
{{item_price}}
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
21
erpnext/public/js/pos/pos_selected_item.html
Normal file
21
erpnext/public/js/pos/pos_selected_item.html
Normal file
@ -0,0 +1,21 @@
|
||||
<div class="pos-selected-item-action" data-item-code="{%= item_code %}">
|
||||
<div class="pos-list-row">
|
||||
<span class="cell bold">{{item_name}}</span>
|
||||
</div>
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Quantity:</div>
|
||||
<input class="form-control cell pos-item-qty" value="{%= qty %}"/>
|
||||
</div>
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Discount:</div>
|
||||
<input class="form-control cell pos-item-disc" value="{%= discount_percentage %}">
|
||||
</div>
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Price:</div>
|
||||
<input class="form-control cell pos-item-price" value="{%= rate %}"/>
|
||||
</div>
|
||||
<div class="pos-list-row">
|
||||
<div class="cell">Amount:</div>
|
||||
<input class="form-control cell" value="{%= amount %}"/>
|
||||
</div>
|
||||
</div>
|
@ -1,4 +1,4 @@
|
||||
<div class="row">
|
||||
<div class="col-xs-9">{%= description %}</div>
|
||||
<div class="col-xs-3 text-right">{%= tax_amount %}</div>
|
||||
<div class="pos-list-row" style="padding-right: 0;">
|
||||
<div class="cell">{%= description %}</div>
|
||||
<div class="cell text-right bold">{%= tax_amount %}</div>
|
||||
</div>
|
||||
|
@ -17,100 +17,63 @@
|
||||
margin: -10px auto;
|
||||
}
|
||||
|
||||
/* pos */
|
||||
|
||||
.pos-item-area {
|
||||
padding: 0px 10px;
|
||||
.erpnext-icon {
|
||||
width: 24px;
|
||||
margin-right: 0px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
.pos-item-wrapper {
|
||||
padding: 5px;
|
||||
.dashboard-list-item {
|
||||
background-color: inherit;
|
||||
padding: 5px 0px;
|
||||
border-bottom: 1px solid @border-color;
|
||||
}
|
||||
|
||||
.pos-item {
|
||||
#page-stock-balance .dashboard-list-item {
|
||||
padding: 5px 15px;
|
||||
}
|
||||
|
||||
.dashboard-list-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
// assessment tool
|
||||
.frappe-control[data-fieldname='result_html'] {
|
||||
overflow: scroll;
|
||||
}
|
||||
.assessment-result-tool {
|
||||
table-layout: fixed;
|
||||
|
||||
input {
|
||||
width: 100%;
|
||||
border: 0;
|
||||
outline: none;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
th {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
cursor: pointer;
|
||||
padding: 5px;
|
||||
padding-bottom: 15px;
|
||||
border: 1px solid #d1d8dd;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.pos-item-text {
|
||||
padding: 0px 5px;
|
||||
.total-score, .grade, .score {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
.pos-item .item-code {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
/* pos */
|
||||
|
||||
.pos-item .no-image {
|
||||
background-color: #fafbfc;
|
||||
border: 1px dashed #d1d8dd;
|
||||
}
|
||||
body[data-route="pos"] {
|
||||
|
||||
.pos-item-image {
|
||||
width: 100%;
|
||||
height: 0px;
|
||||
padding: 50% 0;
|
||||
text-align: center;
|
||||
line-height: 0;
|
||||
color: @text-extra-muted;
|
||||
font-size: 30px;
|
||||
background-size: contain;
|
||||
border: 1px solid transparent;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.pos-item-area {
|
||||
border: 1px solid #d1d8dd;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.pos-item-toolbar {
|
||||
.pos-bill-toolbar {
|
||||
padding: 10px 0px;
|
||||
border-bottom: 1px solid #d1d8dd;
|
||||
}
|
||||
|
||||
.item-list-area {
|
||||
padding: 15px 0px;
|
||||
overflow-y: scroll;
|
||||
height: ~"calc(100vh - 162px)";
|
||||
}
|
||||
|
||||
.pos-toolbar, .pos-bill-toolbar {
|
||||
padding: 10px 0px;
|
||||
// border-bottom: 1px solid #d1d8dd;
|
||||
height: 51px;
|
||||
}
|
||||
|
||||
.pos-item-toolbar .form-group {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.pos-bill-wrapper {
|
||||
border: 1px solid #d1d8dd;
|
||||
border-top: none;
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
.pos-bill {
|
||||
border-top: 1px solid @border-color;
|
||||
margin-left: -15px;
|
||||
margin-right: -15px;
|
||||
}
|
||||
|
||||
.pos-bill-row {
|
||||
margin: 0px;
|
||||
padding: 7px 0px;
|
||||
border-top: 1px solid #d1d8dd;
|
||||
}
|
||||
|
||||
.pos-bill-header {
|
||||
border: none !important;
|
||||
.pos-bill-item:hover, .list-customers-table > .pos-list-row:hover {
|
||||
background-color: #f5f7fa;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.pos-item-qty {
|
||||
@ -127,44 +90,24 @@
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
.pos .search-area .form-group {
|
||||
.search-area .form-group {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
.pos .tax-table {
|
||||
.tax-table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.erpnext-icon {
|
||||
width: 24px;ack
|
||||
margin-right: 0px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
.pos .discount-amount-area {
|
||||
.discount-field-col {
|
||||
padding-left: 0px;
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
margin-top: 2px;
|
||||
.discount-amount-area {
|
||||
.input-group:first-child {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard-list-item {
|
||||
background-color: inherit;
|
||||
padding: 5px 0px;
|
||||
border-bottom: 1px solid @border-color;
|
||||
}
|
||||
|
||||
#page-stock-balance .dashboard-list-item {
|
||||
padding: 5px 15px;
|
||||
}
|
||||
|
||||
.dashboard-list-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.payment-toolbar {
|
||||
.row {
|
||||
width: 323px;
|
||||
@ -206,6 +149,58 @@
|
||||
border-color: #e8e8e8;
|
||||
}
|
||||
|
||||
.numeric-keypad {
|
||||
border: 1px solid #d1d8dd;
|
||||
height:69px;
|
||||
width:69px;
|
||||
font-size:20px;
|
||||
font-weight:200;
|
||||
background-color: #FDFDFD;
|
||||
border-color: #e8e8e8;
|
||||
margin-left:-4px;
|
||||
}
|
||||
|
||||
.pos-pay {
|
||||
height:69px;
|
||||
width:69px;
|
||||
font-size:17px;
|
||||
font-weight:200;
|
||||
margin-left:-4px;
|
||||
}
|
||||
|
||||
.numeric-keypad {
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
font-size: 20px;
|
||||
font-weight: 200;
|
||||
border-radius: 0;
|
||||
background-color: #fff;
|
||||
margin-left:-4px;
|
||||
}
|
||||
|
||||
.numeric_keypad {
|
||||
margin-left: -15px;
|
||||
|
||||
& > .row > button {
|
||||
border: none;
|
||||
border-right: 1px solid @border-color;
|
||||
border-bottom: 1px solid @border-color;
|
||||
|
||||
&:first-child {
|
||||
border-left: 1px solid @border-color;
|
||||
}
|
||||
}
|
||||
|
||||
& > .row:first-child > button {
|
||||
border-top: 1px solid @border-color;
|
||||
}
|
||||
}
|
||||
|
||||
.pos-pay {
|
||||
background-color: @brand-primary;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.multimode-payments {
|
||||
padding-left: 30px;
|
||||
}
|
||||
@ -218,7 +213,7 @@
|
||||
border-top: 1px solid @border-color;
|
||||
}
|
||||
|
||||
body[data-route="pos"] .modal-dialog {
|
||||
.modal-dialog {
|
||||
width: 750px;
|
||||
|
||||
@media (max-width: @screen-xs) {
|
||||
@ -263,27 +258,140 @@ body[data-route="pos"] .modal-dialog {
|
||||
width: 130px;
|
||||
}
|
||||
|
||||
// assessment tool
|
||||
.frappe-control[data-fieldname='result_html'] {
|
||||
overflow: scroll;
|
||||
}
|
||||
.assessment-result-tool {
|
||||
.pos-list-row {
|
||||
display: table;
|
||||
table-layout: fixed;
|
||||
|
||||
input {
|
||||
width: 100%;
|
||||
border: 0;
|
||||
outline: none;
|
||||
text-align: right;
|
||||
padding: 9px 15px;
|
||||
font-size: 12px;
|
||||
margin: 0px;
|
||||
border-bottom: 1px solid @border-color;
|
||||
|
||||
.cell {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
|
||||
&.price-cell {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
th {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
.subject {
|
||||
width: 40%
|
||||
}
|
||||
|
||||
.total-score, .grade, .score {
|
||||
text-align: right;
|
||||
.list-row-checkbox, .list-select-all {
|
||||
margin-right: 7px;
|
||||
}
|
||||
}
|
||||
|
||||
.pos-bill-header {
|
||||
background-color: #f5f7fa;
|
||||
border: 1px solid @border-color;
|
||||
padding: 13px 15px;
|
||||
}
|
||||
|
||||
.pos-list-row.active {
|
||||
background-color: @light-yellow;
|
||||
}
|
||||
|
||||
.totals-area {
|
||||
border-right: 1px solid @border-color;
|
||||
border-left: 1px solid @border-color;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.tax-area .pos-list-row {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.item-cart-items {
|
||||
height: ~"calc(100vh - 526px)";
|
||||
overflow: auto;
|
||||
border: 1px solid @border-color;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.no-items-message {
|
||||
min-height: 200px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.pos-list-row:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.form-section-heading {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.item-list {
|
||||
border: 1px solid @border-color;
|
||||
border-top: none;
|
||||
max-height: ~"calc(100vh - 190px)";
|
||||
overflow: auto;
|
||||
|
||||
@media (max-width: @screen-xs) {
|
||||
max-height: initial;
|
||||
}
|
||||
|
||||
.image-field {
|
||||
height: 140px;
|
||||
}
|
||||
|
||||
.pos-item-wrapper {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.price-info {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
margin: 0 0 15px 15px;
|
||||
background-color: rgba(141, 153, 166, 0.6);
|
||||
padding: 5px 9px;
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.pos-bill-toolbar {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.search-item .form-group {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.item-list-area .pos-bill-header {
|
||||
padding: 5px;
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
.pos-selected-item-action > .pos-list-row {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.edit-customer-btn {
|
||||
position: absolute;
|
||||
right: 57px;
|
||||
top: 15px;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.btn-more {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
background-color: @light-bg;
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.collapse-btn {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user