fix(shipment): change shipment test and refactor shipment.js

This commit is contained in:
jbienesdev
2020-11-23 06:12:50 +00:00
parent ac3c1f1493
commit 28055f483d
4 changed files with 38 additions and 183 deletions

View File

@@ -619,6 +619,7 @@ def make_shipment(source_name, target_doc=None):
"name": "prevdoc_detail_docname", "name": "prevdoc_detail_docname",
"parent": "prevdoc_docname", "parent": "prevdoc_docname",
"parenttype": "prevdoc_doctype", "parenttype": "prevdoc_doctype",
"base_amount": "grand_total"
} }
} }
}, target_doc, postprocess) }, target_doc, postprocess)

View File

@@ -23,76 +23,20 @@ frappe.ui.form.on('Shipment', {
}, },
onload: function(frm) { onload: function(frm) {
frm.set_query("delivery_address_name", () => { frm.set_query("delivery_address_name", () => {
let link_doctype = ''; let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
let link_name = ''; return frm.events.address_query(frm, frm.doc.delivery_to_type, frm.doc[delivery_to], frm.doc.delivery_to_type === 'Company' ? 1 : 0);
let is_your_company_address = 0;
if (frm.doc.delivery_to_type == 'Customer') {
link_doctype = 'Customer';
link_name = frm.doc.delivery_customer;
}
if (frm.doc.delivery_to_type == 'Supplier') {
link_doctype = 'Supplier';
link_name = frm.doc.delivery_supplier;
}
if (frm.doc.delivery_to_type == 'Company') {
link_doctype = 'Company';
link_name = frm.doc.delivery_company;
is_your_company_address = 1;
}
return frm.events.address_query(frm, link_doctype, link_name, is_your_company_address);
}); });
frm.set_query("pickup_address_name", () => { frm.set_query("pickup_address_name", () => {
let link_doctype = ''; let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
let link_name = ''; return frm.events.address_query(frm, frm.doc.pickup_from_type, frm.doc[pickup_from], frm.doc.pickup_from_type === 'Company' ? 1 : 0);
let is_your_company_address = 0;
if (frm.doc.pickup_from_type == 'Customer') {
link_doctype = 'Customer';
link_name = frm.doc.pickup_customer;
}
if (frm.doc.pickup_from_type == 'Supplier') {
link_doctype = 'Supplier';
link_name = frm.doc.pickup_supplier;
}
if (frm.doc.pickup_from_type == 'Company') {
link_doctype = 'Company';
link_name = frm.doc.pickup_company;
is_your_company_address = 1;
}
return frm.events.address_query(frm, link_doctype, link_name, is_your_company_address);
}); });
frm.set_query("delivery_contact_name", () => { frm.set_query("delivery_contact_name", () => {
let link_doctype = ''; let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
let link_name = ''; return frm.events.contact_query(frm, frm.doc.delivery_to_type, frm.doc[delivery_to]);
if (frm.doc.delivery_to_type == 'Customer') {
link_doctype = 'Customer';
link_name = frm.doc.delivery_customer;
}
if (frm.doc.delivery_to_type == 'Supplier') {
link_doctype = 'Supplier';
link_name = frm.doc.delivery_supplier;
}
if (frm.doc.delivery_to_type == 'Company') {
link_doctype = 'Company';
link_name = frm.doc.delivery_company;
}
return frm.events.contact_query(frm, link_doctype, link_name);
}); });
frm.set_query("pickup_contact_name", () => { frm.set_query("pickup_contact_name", () => {
let link_doctype = ''; let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
let link_name = ''; return frm.events.contact_query(frm, frm.doc.pickup_from_type, frm.doc[pickup_from]);
if (frm.doc.pickup_from_type == 'Customer') {
link_doctype = 'Customer';
link_name = frm.doc.pickup_customer;
}
if (frm.doc.pickup_from_type == 'Supplier') {
link_doctype = 'Supplier';
link_name = frm.doc.pickup_supplier;
}
if (frm.doc.pickup_from_type == 'Company') {
link_doctype = 'Company';
link_name = frm.doc.pickup_company;
}
return frm.events.contact_query(frm, link_doctype, link_name);
}); });
frm.set_query("delivery_note", "shipment_delivery_note", function() { frm.set_query("delivery_note", "shipment_delivery_note", function() {
let customer = ''; let customer = '';
@@ -120,24 +64,10 @@ frappe.ui.form.on('Shipment', {
$('div[data-fieldname=delivery_contact] > div > .clearfix').hide(); $('div[data-fieldname=delivery_contact] > div > .clearfix').hide();
}, },
before_save: function(frm) { before_save: function(frm) {
if (frm.doc.delivery_to_type == 'Company') { let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
frm.set_value("delivery_to", frm.doc.delivery_company); frm.set_value("delivery_to", frm.doc[delivery_to]);
} let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
if (frm.doc.delivery_to_type == 'Customer') { frm.set_value("pickup", frm.doc[pickup_from]);
frm.set_value("delivery_to", frm.doc.delivery_customer);
}
if (frm.doc.delivery_to_type == 'Supplier') {
frm.set_value("delivery_to", frm.doc.delivery_supplier);
}
if (frm.doc.pickup_from_type == 'Company') {
frm.set_value("pickup", frm.doc.pickup_company);
}
if (frm.doc.pickup_from_type == 'Customer') {
frm.set_value("pickup", frm.doc.pickup_customer);
}
if (frm.doc.pickup_from_type == 'Supplier') {
frm.set_value("pickup", frm.doc.pickup_supplier);
}
}, },
set_pickup_company_address: function(frm) { set_pickup_company_address: function(frm) {
frappe.db.get_value('Address', { frappe.db.get_value('Address', {
@@ -476,18 +406,11 @@ frappe.ui.form.on('Shipment', {
current_min = '00'; current_min = '00';
current_hour = Number(current_hour)+1; current_hour = Number(current_hour)+1;
} }
if (Number(current_hour) > 19 || Number(current_hour) === 19){
frappe.throw(__("Today's pickup time is over, please select different date"));
}
current_hour = (current_hour < 10) ? '0' + current_hour : current_hour;
let pickup_time = current_hour +':'+ current_min; let pickup_time = current_hour +':'+ current_min;
return pickup_time; return pickup_time;
}, },
set_pickup_to_time: function(frm) { set_pickup_to_time: function(frm) {
let pickup_to_hour = Number(frm.doc.pickup_from.split(':')[0])+5; let pickup_to_hour = Number(frm.doc.pickup_from.split(':')[0])+5;
if (Number(pickup_to_hour) > 19 || Number(pickup_to_hour) === 19){
pickup_to_hour = 19;
}
let pickup_to_min = frm.doc.pickup_from.split(':')[1]; let pickup_to_min = frm.doc.pickup_from.split(':')[1];
let pickup_to = pickup_to_hour +':'+ pickup_to_min; let pickup_to = pickup_to_hour +':'+ pickup_to_min;
frm.set_value("pickup_to", pickup_to); frm.set_value("pickup_to", pickup_to);

View File

@@ -460,13 +460,28 @@
], ],
"is_submittable": 1, "is_submittable": 1,
"links": [], "links": [],
"modified": "2020-11-20 16:19:06.157106", "modified": "2020-11-23 16:26:28.132608",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Shipment", "name": "Shipment",
"owner": "Administrator", "owner": "Administrator",
"permissions": [ "permissions": [
{ {
"cancel": 1,
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Stock Manager",
"share": 1,
"submit": 1,
"write": 1
},
{
"cancel": 1,
"create": 1, "create": 1,
"delete": 1, "delete": 1,
"email": 1, "email": 1,
@@ -476,6 +491,7 @@
"report": 1, "report": 1,
"role": "System Manager", "role": "System Manager",
"share": 1, "share": 1,
"submit": 1,
"write": 1 "write": 1
} }
], ],

View File

@@ -7,89 +7,19 @@ from datetime import date, timedelta
import frappe import frappe
import unittest import unittest
from erpnext.stock.doctype.shipment.shipment import fetch_shipping_rates from erpnext.stock.doctype.delivery_note.delivery_note import make_shipment
from erpnext.stock.doctype.shipment.shipment import create_shipment
from erpnext.stock.doctype.shipment.shipment import update_tracking
class TestShipment(unittest.TestCase): class TestShipment(unittest.TestCase):
pass
def test_shipment_booking(self):
shipment = create_test_shipment()
try:
shipment.submit()
except:
frappe.throw('Error occurred on submit shipment')
doc, rate, tracking_data = make_shipment_transaction(shipment)
if doc and rate and tracking_data:
self.assertEqual(doc.service_provider, rate.get('service_provider'))
self.assertEqual(doc.shipment_amount, rate.get('actual_price'))
self.assertEqual(doc.carrier, rate.get('carrier'))
self.assertEqual(doc.tracking_status, tracking_data.get('tracking_status'))
self.assertEqual(doc.tracking_url, tracking_data.get('tracking_url'))
def test_shipment_from_delivery_note(self): def test_shipment_from_delivery_note(self):
delivery_note = create_test_delivery_note() delivery_note = create_test_delivery_note()
try: delivery_note.submit()
delivery_note.submit()
except:
frappe.throw('An error occurred.')
shipment = create_test_shipment([ delivery_note ]) shipment = create_test_shipment([ delivery_note ])
try: shipment.submit()
shipment.submit() second_shipment = make_shipment(delivery_note.name)
except: self.assertEqual(second_shipment.value_of_goods, delivery_note.grand_total)
frappe.throw('Error occurred on submit shipment') self.assertEqual(second_shipment.grand_total, delivery_note.grand_total)
doc, rate, tracking_data = make_shipment_transaction(shipment) self.assertEqual(len(second_shipment.shipment_delivery_note), 1)
if doc and rate and tracking_data: self.assertEqual(second_shipment.shipment_delivery_note[0].delivery_note, delivery_note.name)
self.assertEqual(doc.service_provider, rate.get('service_provider'))
self.assertEqual(doc.shipment_amount, rate.get('actual_price'))
self.assertEqual(doc.carrier, rate.get('carrier'))
self.assertEqual(doc.tracking_status, tracking_data.get('tracking_status'))
self.assertEqual(doc.tracking_url, tracking_data.get('tracking_url'))
def make_shipment_transaction(shipment):
shipment_parcel = convert_shipmet_parcel(shipment.shipment_parcel)
shipment_rates = fetch_shipping_rates(shipment.pickup_from_type, shipment.delivery_to_type,
shipment.pickup_address_name, shipment.delivery_address_name,
shipment_parcel, shipment.description_of_content,
shipment.pickup_date, shipment.value_of_goods,
pickup_contact_name=shipment.pickup_contact_name,
delivery_contact_name=shipment.delivery_contact_name
)
if len(shipment_rates) > 0:
# We are taking the first shipment rate
rate = shipment_rates[0]
new_shipment = create_shipment(
shipment=shipment.name,
pickup_from_type=shipment.pickup_from_type,
delivery_to_type=shipment.delivery_to_type,
pickup_address_name=shipment.pickup_address_name,
delivery_address_name=shipment.delivery_address_name,
shipment_parcel=shipment_parcel,
description_of_content=shipment.description_of_content,
pickup_date=shipment.pickup_date,
pickup_contact_name=shipment.pickup_contact_name,
delivery_contact_name=shipment.delivery_contact_name,
value_of_goods=shipment.value_of_goods,
service_data=json.dumps(rate),
shipment_notific_email=None,
tracking_notific_email=None,
delivery_notes=None
)
service_provider = rate.get('service_provider')
shipment_id = new_shipment.get('shipment_id')
tracking_data = update_tracking(
shipment.name,
service_provider,
shipment_id,
delivery_notes=None
)
doc = frappe.get_doc('Shipment', shipment.name)
return doc, rate, tracking_data
return None, None, None
def create_test_delivery_note(): def create_test_delivery_note():
company = get_shipment_company() company = get_shipment_company()
@@ -316,18 +246,3 @@ def create_shipment_item(item_name, company_name):
except: except:
frappe.throw('An error occurred.') frappe.throw('An error occurred.')
return item return item
def convert_shipmet_parcel(shipmet_parcel):
data = []
for parcel in shipmet_parcel:
data.append(
{
"length": parcel.length,
"width": parcel.width,
"height": parcel.height,
"weight": parcel.weight,
"count": parcel.count
}
)
return json.dumps(data)