fix(shipment): change shipment test and refactor shipment.js
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 26e4f16..979e83d 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -619,6 +619,7 @@
"name": "prevdoc_detail_docname",
"parent": "prevdoc_docname",
"parenttype": "prevdoc_doctype",
+ "base_amount": "grand_total"
}
}
}, target_doc, postprocess)
diff --git a/erpnext/stock/doctype/shipment/shipment.js b/erpnext/stock/doctype/shipment/shipment.js
index aa792a4..62070e4 100644
--- a/erpnext/stock/doctype/shipment/shipment.js
+++ b/erpnext/stock/doctype/shipment/shipment.js
@@ -23,76 +23,20 @@
},
onload: function(frm) {
frm.set_query("delivery_address_name", () => {
- let link_doctype = '';
- let link_name = '';
- 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);
+ let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
+ return frm.events.address_query(frm, frm.doc.delivery_to_type, frm.doc[delivery_to], frm.doc.delivery_to_type === 'Company' ? 1 : 0);
});
frm.set_query("pickup_address_name", () => {
- let link_doctype = '';
- let link_name = '';
- 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);
+ let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
+ return frm.events.address_query(frm, frm.doc.pickup_from_type, frm.doc[pickup_from], frm.doc.pickup_from_type === 'Company' ? 1 : 0);
});
frm.set_query("delivery_contact_name", () => {
- let link_doctype = '';
- let link_name = '';
- 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);
+ let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
+ return frm.events.contact_query(frm, frm.doc.delivery_to_type, frm.doc[delivery_to]);
});
frm.set_query("pickup_contact_name", () => {
- let link_doctype = '';
- let link_name = '';
- 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);
+ let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
+ return frm.events.contact_query(frm, frm.doc.pickup_from_type, frm.doc[pickup_from]);
});
frm.set_query("delivery_note", "shipment_delivery_note", function() {
let customer = '';
@@ -120,24 +64,10 @@
$('div[data-fieldname=delivery_contact] > div > .clearfix').hide();
},
before_save: function(frm) {
- if (frm.doc.delivery_to_type == 'Company') {
- frm.set_value("delivery_to", frm.doc.delivery_company);
- }
- if (frm.doc.delivery_to_type == 'Customer') {
- 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);
- }
+ let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
+ frm.set_value("delivery_to", frm.doc[delivery_to]);
+ let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
+ frm.set_value("pickup", frm.doc[pickup_from]);
},
set_pickup_company_address: function(frm) {
frappe.db.get_value('Address', {
@@ -476,18 +406,11 @@
current_min = '00';
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;
return pickup_time;
},
set_pickup_to_time: function(frm) {
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 = pickup_to_hour +':'+ pickup_to_min;
frm.set_value("pickup_to", pickup_to);
diff --git a/erpnext/stock/doctype/shipment/shipment.json b/erpnext/stock/doctype/shipment/shipment.json
index 9ac6102..7e2c5ba 100644
--- a/erpnext/stock/doctype/shipment/shipment.json
+++ b/erpnext/stock/doctype/shipment/shipment.json
@@ -460,13 +460,28 @@
],
"is_submittable": 1,
"links": [],
- "modified": "2020-11-20 16:19:06.157106",
+ "modified": "2020-11-23 16:26:28.132608",
"modified_by": "Administrator",
"module": "Stock",
"name": "Shipment",
"owner": "Administrator",
"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,
"delete": 1,
"email": 1,
@@ -476,6 +491,7 @@
"report": 1,
"role": "System Manager",
"share": 1,
+ "submit": 1,
"write": 1
}
],
diff --git a/erpnext/stock/doctype/shipment/test_shipment.py b/erpnext/stock/doctype/shipment/test_shipment.py
index 6a06930..f61b87f 100644
--- a/erpnext/stock/doctype/shipment/test_shipment.py
+++ b/erpnext/stock/doctype/shipment/test_shipment.py
@@ -7,89 +7,19 @@
import frappe
import unittest
-from erpnext.stock.doctype.shipment.shipment import fetch_shipping_rates
-from erpnext.stock.doctype.shipment.shipment import create_shipment
-from erpnext.stock.doctype.shipment.shipment import update_tracking
+from erpnext.stock.doctype.delivery_note.delivery_note import make_shipment
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):
delivery_note = create_test_delivery_note()
- try:
- delivery_note.submit()
- except:
- frappe.throw('An error occurred.')
-
+ delivery_note.submit()
shipment = create_test_shipment([ delivery_note ])
- 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 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
+ shipment.submit()
+ second_shipment = make_shipment(delivery_note.name)
+ self.assertEqual(second_shipment.value_of_goods, delivery_note.grand_total)
+ self.assertEqual(second_shipment.grand_total, delivery_note.grand_total)
+ self.assertEqual(len(second_shipment.shipment_delivery_note), 1)
+ self.assertEqual(second_shipment.shipment_delivery_note[0].delivery_note, delivery_note.name)
def create_test_delivery_note():
company = get_shipment_company()
@@ -316,18 +246,3 @@
except:
frappe.throw('An error occurred.')
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)