93 lines
3.0 KiB
Python
93 lines
3.0 KiB
Python
import frappe
|
|
from frappe import _
|
|
|
|
@frappe.whitelist()
|
|
def quick_sell(serial_no, customer=None, payment_method='Cash'):
|
|
"""Create Sales Invoice for quick cash sale."""
|
|
try:
|
|
serial = frappe.get_doc('Serial No', serial_no)
|
|
|
|
if serial.r2_status != 'Ready for Sale':
|
|
return {'error': 'Device must be Ready for Sale'}
|
|
|
|
# Use default customer if none provided
|
|
if not customer:
|
|
customer = frappe.db.get_value('Customer', {}, 'name', order_by='creation asc')
|
|
if not customer:
|
|
# Create walk-in customer
|
|
customer = frappe.get_doc({
|
|
'doctype': 'Customer',
|
|
'customer_name': 'Walk-in Customer',
|
|
'customer_type': 'Individual'
|
|
}).insert(ignore_permissions=True).name
|
|
|
|
# Create Sales Invoice
|
|
price = serial.assigned_price or serial.suggested_price or 0
|
|
|
|
invoice = frappe.get_doc({
|
|
'doctype': 'Sales Invoice',
|
|
'customer': customer,
|
|
'serial_no': serial_no,
|
|
'device_condition': f"Cosmetic: {serial.cosmetic_grade or 'N/A'}",
|
|
'posting_date': frappe.utils.today(),
|
|
'due_date': frappe.utils.today(),
|
|
'items': [{
|
|
'item_code': serial.item_code,
|
|
'qty': 1,
|
|
'rate': price,
|
|
'amount': price,
|
|
'serial_no': serial_no
|
|
}],
|
|
'payments': [{
|
|
'mode_of_payment': payment_method,
|
|
'amount': price
|
|
}]
|
|
})
|
|
invoice.insert(ignore_permissions=True)
|
|
invoice.submit()
|
|
|
|
# Update Serial No
|
|
serial.r2_status = 'Sold'
|
|
serial.status = 'Delivered'
|
|
serial.customer = customer
|
|
serial.save(ignore_permissions=True)
|
|
|
|
return {
|
|
'success': True,
|
|
'invoice': invoice.name,
|
|
'customer': customer,
|
|
'amount': price
|
|
}
|
|
|
|
except Exception as e:
|
|
frappe.log_error(f"Quick sell failed: {str(e)}", "Sales")
|
|
return {'error': str(e)}
|
|
|
|
@frappe.whitelist()
|
|
def create_sales_order(quotation_name):
|
|
"""Create Sales Order from Quotation."""
|
|
try:
|
|
from erpnext.selling.doctype.quotation.quotation import make_sales_order
|
|
|
|
so = make_sales_order(quotation_name)
|
|
so.insert(ignore_permissions=True)
|
|
so.submit()
|
|
|
|
return {'success': True, 'sales_order': so.name}
|
|
except Exception as e:
|
|
return {'error': str(e)}
|
|
|
|
@frappe.whitelist()
|
|
def create_delivery_note(sales_order_name):
|
|
"""Create Delivery Note from Sales Order."""
|
|
try:
|
|
from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
|
|
|
|
dn = make_delivery_note(sales_order_name)
|
|
dn.insert(ignore_permissions=True)
|
|
dn.submit()
|
|
|
|
return {'success': True, 'delivery_note': dn.name}
|
|
except Exception as e:
|
|
return {'error': str(e)}
|