Created
July 31, 2017 13:22
-
-
Save elcolie/057d75c0e5adf61d1ffbdf55b271e72a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import functools | |
@functools.total_ordering | |
class GIRow: | |
def __init__(self, dmd_name: str, md_name: str, rtr_name: str, | |
province: str, district: str, sub_district: str, address: str, node_type: str, node_alive: bool, imei: str, | |
goodsmovement_dt: str, active_user: str, user_node: str, profile_name: str, product_code: str): | |
self.dmd_name = dmd_name | |
self.md_name = md_name | |
self.rtr_name = rtr_name | |
self.province = province | |
self.district = district | |
self.sub_district = sub_district | |
self.address = address | |
self.node_type = node_type | |
self.node_alive = node_alive | |
self.imei = imei | |
self.goodsmovement_dt = goodsmovement_dt | |
self.active_user = active_user | |
self.user_node = user_node | |
self.profile_name = profile_name | |
self.product_code = product_code | |
def __str__(self): | |
return f"{self.dmd_name} {self.md_name} {self.rtr_name} {self.imei}" | |
def __eq__(self, other): | |
return self.node_type == other.node_type | |
def __lt__(self, other): | |
"""This is customization because Node-Type is mixed up between EN and Thai""" | |
result = super().__lt__(other) | |
if self.node_type == 'D' and other.node_type == 'สาขา sub-D': | |
return self.node_type < other.node_type | |
elif self.node_type == 'D' and other.node_type == 'RTR': | |
return self.node_type < other.node_type | |
elif self.node_type == 'สาขา sub-D' and other.node_type == 'RTR': | |
return self.node_type < other.node_type | |
else: | |
return self.node_type > other.node_type | |
from operator import attrgetter | |
from django.test import TestCase | |
from yaoms.apps.module.reports.utils import GIRow | |
class GIRowSortingTest(TestCase): | |
def setUp(self): | |
self.node_d1 = GIRow( | |
'-', '-', '-', None, None, None, None, 'D', None, | |
'357291087318907', None, None, None, None, None | |
) | |
self.node_d2 = GIRow( | |
'-', '-', '-', None, None, None, None, 'D', None, | |
'357291087318909', None, None, None, None, None | |
) | |
self.node_d3 = GIRow( | |
'-', '-', '-', None, None, None, None, 'D', None, | |
'357291087318905', None, None, None, None, None | |
) | |
self.node_md1 = GIRow( | |
'โคราชนวกิจ คอมมูนิเคชั่น จำกัด', '(TWZ By โคราชนวกิจ) [โคราชนวกิจ คอมมูนิเคชั่น นครราชสีมา]', '-', | |
'นครราชสีมา', 'เมือง', 'ในเมือง', 'ศูนย์การค้าเทอร์มินอล 21 ห้องเลขที่ 3006 ชั้น 3', 'สาขา sub-D', True, | |
'356015087104947', '22/05/2017', '0827578773', '(TWZ By โคราชนวกิจ) [โคราชนวกิจ คอมมูนิเคชั่น นครราชสีมา]', | |
'(TWZ By โคราชนวกิจ) [โคราชนวกิจ คอมมูนิเคชั่น นครราชสีมา]', 'SP1-S12NO41201I' | |
) | |
self.node_md2 = GIRow( | |
'ไอบิส พลัส เน็ทเวอร์ค จำกัด', | |
'บริษัทไอบิส พลัส เน็ทเวอร์ค จำกัด(จ.นครปฐม) [ไอบิส พลัส เน็ทเวอร์ค สนง.ใหญ่ นครปฐม]', '-', 'นครปฐม', | |
'เมือง', 'พระปฐมเจดีย์', '55 ถ.ราชวิถี', 'สาขา sub-D', True, '356015087104988', '08/06/2017', '0801113679', | |
'บริษัทไอบิส พลัส เน็ทเวอร์ค จำกัด(จ.นครปฐม) [ไอบิส พลัส เน็ทเวอร์ค สนง.ใหญ่ นครปฐม]', | |
'บริษัทไอบิส พลัส เน็ทเวอร์ค จำกัด(จ.นครปฐม) [ไอบิส พลัส เน็ทเวอร์ค สนง.ใหญ่ นครปฐม]', 'SP1-S12NO41201I' | |
) | |
self.node_md3 = GIRow('ไอ.เทค พลัส ดิสทริบิวชั่น จำกัด', | |
'บริษัทไอ.เทค พลัส ดิสทริบิวชั่น จำกัด(จ.ปราจีนบุรี) [ไอ.เทค พลัส ดิสทริบิวชั่น สนง.ใหญ่ ปราจีนบุรี]', | |
'-', 'ปราจีนบุรี', 'เมือง', 'หน้าเมือง', '147/2 ถ.ราษฎรดำริ', 'สาขา sub-D', True, | |
'356015087105001', '25/05/2017', '0812449999', | |
'บริษัทไอ.เทค พลัส ดิสทริบิวชั่น จำกัด(จ.ปราจีนบุรี) [ไอ.เทค พลัส ดิสทริบิวชั่น สนง.ใหญ่ ปราจีนบุรี]', | |
'บริษัทไอ.เทค พลัส ดิสทริบิวชั่น จำกัด(จ.ปราจีนบุรี) [ไอ.เทค พลัส ดิสทริบิวชั่น สนง.ใหญ่ ปราจีนบุรี]', | |
'SP1-S12NO41201I') | |
self.node_md4 = GIRow('ไมโคโมไบดิส จำกัด (WAP)', | |
'บริษัทไมโคโมไบดิส จำกัด (WAP)(จ.ชลบุรี) [บจ.ไมโคโมไบดิส สนง.ใหญ่ ชลบุรี]', '-', 'ชลบุรี', | |
'บ้านบึง', 'บ้านบึง', '8 ชั้นที่ 2ถ.บวรสถิตย์', 'สาขา sub-D', True, '356015087105043', | |
'20/05/2017', '0830007773', | |
'บริษัทไมโคโมไบดิส จำกัด (WAP)(จ.ชลบุรี) [บจ.ไมโคโมไบดิส สนง.ใหญ่ ชลบุรี]', | |
'บริษัทไมโคโมไบดิส จำกัด (WAP)(จ.ชลบุรี) [บจ.ไมโคโมไบดิส สนง.ใหญ่ ชลบุรี]', | |
'SP1-S12NO41201I') | |
self.node_md5 = GIRow('ไอ.เทค คอม กรุ๊ป จำกัด', | |
'บริษัทไอ.เทค คอม กรุ๊ป จำกัด(จ.สระบุรี) [ไอ.เทค คอม กรุ๊ป จำกัด สนง.ใหญ่ สระบุรี]', '-', | |
'สระบุรี', 'เมือง', 'ปากเพรียว', '325/49-51ถ.เทศบาล 2', 'สาขา sub-D', True, | |
'356015087105068', | |
'22/05/2017', '0811777744', | |
'บริษัทไอ.เทค คอม กรุ๊ป จำกัด(จ.สระบุรี) [ไอ.เทค คอม กรุ๊ป จำกัด สนง.ใหญ่ สระบุรี]', | |
'บริษัทไอ.เทค คอม กรุ๊ป จำกัด(จ.สระบุรี) [ไอ.เทค คอม กรุ๊ป จำกัด สนง.ใหญ่ สระบุรี]', | |
'SP1-S12NO41201I') | |
self.node_md6 = GIRow('โอเอ เทเลคอม แอนด์ เซอร์วิส จำกัด', | |
'บริษัทโอเอ เทเลคอม แอนด์ เซอร์วิส จำกัด(จ.นครศรีธรรมราช) [โอเอ เทเลคอม แอนด์ เซอร์วิส สนง.ใหญ่ นครศรีธรรมราช]', | |
'-', 'นครศรีธรรมราช', 'เมือง', 'คลัง', | |
'89/12-13 อาคาร เฟิสท์ซิตี้ช้อปปิ้งเซ็นเตอร์ถ.พัฒนาการคูขวาง', 'สาขา sub-D', True, | |
'356015087105084', '28/05/2017', '0992366565', | |
'บริษัทโอเอ เทเลคอม แอนด์ เซอร์วิส จำกัด(จ.นครศรีธรรมราช) [โอเอ เทเลคอม แอนด์ เซอร์วิส สนง.ใหญ่ นครศรีธรรมราช]', | |
'บริษัทโอเอ เทเลคอม แอนด์ เซอร์วิส จำกัด(จ.นครศรีธรรมราช) [โอเอ เทเลคอม แอนด์ เซอร์วิส สนง.ใหญ่ นครศรีธรรมราช]', | |
'SP1-S12NO41201I') | |
self.node_md7 = GIRow('ไอ.เทค คอม กรุ๊ป จำกัด', | |
'บริษัทไอ.เทค คอม กรุ๊ป จำกัด(จ.สระบุรี) [ไอ.เทค คอม กรุ๊ป จำกัด สนง.ใหญ่ สระบุรี]', '-', | |
'สระบุรี', 'เมือง', 'ปากเพรียว', '325/49-51ถ.เทศบาล 2', 'สาขา sub-D', True, | |
'356015087105142', | |
'22/05/2017', '0811777744', | |
'บริษัทไอ.เทค คอม กรุ๊ป จำกัด(จ.สระบุรี) [ไอ.เทค คอม กรุ๊ป จำกัด สนง.ใหญ่ สระบุรี]', | |
'บริษัทไอ.เทค คอม กรุ๊ป จำกัด(จ.สระบุรี) [ไอ.เทค คอม กรุ๊ป จำกัด สนง.ใหญ่ สระบุรี]', | |
'SP1-S12NO41201I') | |
self.node_rtr1 = GIRow('ไมโคโมไบดิส จำกัด (WAP)', '-', 'สไมล์ โมบาย', 'ชลบุรี', 'บ่อทอง', 'บ่อทอง', '169 ม.1', | |
'RTR', True, '356020083698058', '11/07/2017', '020165777', 'Yas', 'Yas', | |
'SP1-S12NA06000I') | |
self.node_rtr2 = GIRow('ไมโคโมไบดิส จำกัด (WAP)', '-', 'สไมล์ โมบาย', 'ชลบุรี', 'บ่อทอง', 'บ่อทอง', '169 ม.1', | |
'RTR', True, '356020083712842', '11/07/2017', '020165777', 'Yas', 'Yas', | |
'SP1-S12NA06000I') | |
self.node_rtr3 = GIRow('เอทีเอช แอซเซ็ท จำกัด (SP)', '-', 'พี อาร์ ที คอร์ปอเรชั่น', 'บุรีรัมย์', 'เมือง', | |
'ในเมือง', '448/19-20 ถ.จิระ', 'RTR', True, '356024080085368', '12/07/2017', | |
'0818766666', | |
'เอทีเอช แอซเซ็ท จำกัด (SP)', 'เอทีเอช แอซเซ็ท จำกัด (SP)', 'SP1-S12NA05000I') | |
self.node_rtr4 = GIRow('โมบายช็อป', '-', 'บริษัท โมบาย ไฮเทค คอร์ปอเรชั่น จำกัด', 'เชียงราย', 'เมือง', | |
'รอบเวียง', | |
'รอบเวียง', 'RTR', True, '356024080089055', '12/07/2017', '0818766666', | |
'เอทีเอช แอซเซ็ท จำกัด (SP)', 'เอทีเอช แอซเซ็ท จำกัด (SP)', 'SP1-S12NA05000I') | |
self.node_rtr5 = GIRow('สมาร์ท ดิสทริบิวชั่น จำกัด', '-', 'ยะรังโมบาย', 'ปัตตานี', 'ยะรัง', 'ยะรัง', '206 3', | |
'RTR', True, | |
'356024080388267', '07/07/2017', '0873913999', | |
'Van 2 (PDV) [บจ.สมาร์ท ดิสทริบิวชั่น ยะลา]', | |
'Van 2 (PDV) [บจ.สมาร์ท ดิสทริบิวชั่น ยะลา]', 'SP1-S12NA05001I') | |
self.node_rtr6 = GIRow('สมาร์ท ดิสทริบิวชั่น จำกัด', '-', 'ยะรังโมบาย', 'ปัตตานี', 'ยะรัง', 'ยะรัง', '206 3', | |
'RTR', True, | |
'356024080915226', '07/07/2017', '0873913999', | |
'Van 2 (PDV) [บจ.สมาร์ท ดิสทริบิวชั่น ยะลา]', | |
'Van 2 (PDV) [บจ.สมาร์ท ดิสทริบิวชั่น ยะลา]', 'SP1-S12NA05001I') | |
self.node_rtr7 = GIRow('โมบายช็อป', '-', 'ร้าน แม่อายเซอร์วิสช็อป', 'เชียงใหม่', 'แม่อาย', 'มะลิกา', 'มะลิกา', | |
'RTR', True, '356803080346379', '11/07/2017', '0987495265', 'ร้าน แม่อายเซอร์วิสช็อป', | |
'ร้าน แม่อายเซอร์วิสช็อป', 'SP1-S12NA03002I') | |
def test_sort_pure_d(self): | |
problem = [self.node_d1, self.node_d2, self.node_d3] | |
result = sorted(problem, key=attrgetter('node_type', 'dmd_name', 'md_name', 'rtr_name', 'imei')) | |
self.assertEqual('357291087318905', result[0].imei) | |
self.assertEqual('357291087318907', result[1].imei) | |
self.assertEqual('357291087318909', result[2].imei) | |
def test_sort_pure_md(self): | |
problem = [self.node_md1, self.node_md2, self.node_md3, self.node_md4, self.node_md5, self.node_md6, | |
self.node_md7] | |
result = sorted(problem, key=attrgetter('node_type', 'dmd_name', 'md_name', 'rtr_name', 'imei')) | |
self.assertEqual('โคราชนวกิจ คอมมูนิเคชั่น จำกัด', result[0]) | |
self.assertEqual('โอเอ เทเลคอม แอนด์ เซอร์วิส จำกัด', result[1]) | |
self.assertEqual('ไมโคโมไบดิส จำกัด (WAP)', result[2]) | |
self.assertEqual('ไอ.เทค คอม กรุ๊ป จำกัด', result[3]) | |
self.assertEqual('ไอ.เทค คอม กรุ๊ป จำกัด', result[4]) | |
self.assertEqual('ไอ.เทค คอม กรุ๊ป จำกัด', result[5]) | |
self.assertEqual('ไอ.เทค พลัส ดิสทริบิวชั่น จำกัด', result[6]) | |
self.assertEqual('ไอบิส พลัส เน็ทเวอร์ค จำกัด', result[7]) | |
def test_sort_pure_rtr(self): | |
problem = [self.node_rtr1, self.node_rtr2, self.node_rtr3, self.node_rtr4, self.node_rtr5, self.node_rtr6, | |
self.node_rtr7] | |
result = sorted(problem, key=attrgetter('node_type', 'dmd_name', 'md_name', 'rtr_name', 'imei')) | |
self.assertEqual('สมาร์ท ดิสทริบิวชั่น จำกัด - ยะรังโมบาย 356024080388267', str(result[0])) | |
self.assertEqual('สมาร์ท ดิสทริบิวชั่น จำกัด - ยะรังโมบาย 356024080915226', str(result[1])) | |
self.assertEqual('เอทีเอช แอซเซ็ท จำกัด (SP) - พี อาร์ ที คอร์ปอเรชั่น 356024080085368', str(result[2])) | |
self.assertEqual('โมบายช็อป - บริษัท โมบาย ไฮเทค คอร์ปอเรชั่น จำกัด 356024080089055', str(result[3])) | |
self.assertEqual('โมบายช็อป - ร้าน แม่อายเซอร์วิสช็อป 356803080346379', str(result[4])) | |
self.assertEqual('ไมโคโมไบดิส จำกัด (WAP) - สไมล์ โมบาย 356020083698058', str(result[5])) | |
self.assertEqual('ไมโคโมไบดิส จำกัด (WAP) - สไมล์ โมบาย 356020083712842', str(result[6])) | |
def test_sort_mixed_d_md(self): | |
problem = [self.node_md1, self.node_md2, self.node_md3, self.node_md4, self.node_md5, self.node_md6, | |
self.node_md7] + \ | |
[self.node_d1, self.node_d2, self.node_d3] | |
result = sorted(problem, key=attrgetter('node_type', 'dmd_name', 'md_name', 'rtr_name', 'imei')) | |
self.assertEqual('- - - 357291087318905', str(result[0])) | |
self.assertEqual('- - - 357291087318907', str(result[1])) | |
self.assertEqual('- - - 357291087318909', str(result[2])) | |
self.assertEqual( | |
'โคราชนวกิจ คอมมูนิเคชั่น จำกัด (TWZ By โคราชนวกิจ) [โคราชนวกิจ คอมมูนิเคชั่น นครราชสีมา] - 356015087104947', | |
str(result[3])) | |
self.assertEqual( | |
'โอเอ เทเลคอม แอนด์ เซอร์วิส จำกัด บริษัทโอเอ เทเลคอม แอนด์ เซอร์วิส จำกัด(จ.นครศรีธรรมราช) [โอเอ เทเลคอม แอนด์ เซอร์วิส สนง.ใหญ่ นครศรีธรรมราช] - 356015087105084', | |
str(result[4])) | |
self.assertEqual( | |
'ไมโคโมไบดิส จำกัด (WAP) บริษัทไมโคโมไบดิส จำกัด (WAP)(จ.ชลบุรี) [บจ.ไมโคโมไบดิส สนง.ใหญ่ ชลบุรี] - 356015087105043', | |
str(result[5])) | |
self.assertEqual( | |
'ไอ.เทค คอม กรุ๊ป จำกัด บริษัทไอ.เทค คอม กรุ๊ป จำกัด(จ.สระบุรี) [ไอ.เทค คอม กรุ๊ป จำกัด สนง.ใหญ่ สระบุรี] - 356015087105068', | |
str(result[6])) | |
self.assertEqual( | |
'ไอ.เทค คอม กรุ๊ป จำกัด บริษัทไอ.เทค คอม กรุ๊ป จำกัด(จ.สระบุรี) [ไอ.เทค คอม กรุ๊ป จำกัด สนง.ใหญ่ สระบุรี] - 356015087105142', | |
str(result[7])) | |
self.assertEqual( | |
'ไอ.เทค พลัส ดิสทริบิวชั่น จำกัด บริษัทไอ.เทค พลัส ดิสทริบิวชั่น จำกัด(จ.ปราจีนบุรี) [ไอ.เทค พลัส ดิสทริบิวชั่น สนง.ใหญ่ ปราจีนบุรี] - 356015087105001', | |
str(result[8])) | |
self.assertEqual( | |
'ไอบิส พลัส เน็ทเวอร์ค จำกัด บริษัทไอบิส พลัส เน็ทเวอร์ค จำกัด(จ.นครปฐม) [ไอบิส พลัส เน็ทเวอร์ค สนง.ใหญ่ นครปฐม] - 356015087104988', | |
str(result[9])) | |
def test_sort_mixed_d_md_rtr(self): | |
problem = [self.node_rtr1, self.node_rtr2, self.node_rtr3, self.node_rtr4, self.node_rtr5, self.node_rtr6, | |
self.node_rtr7] + \ | |
[self.node_md1, self.node_md2, self.node_md3, self.node_md4, self.node_md5, self.node_md6, | |
self.node_md7] + \ | |
[self.node_d1, self.node_d2, self.node_d3] | |
result = sorted(problem, key=attrgetter('node_type', 'dmd_name', 'md_name', 'rtr_name', 'imei')) | |
pass |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment