Compare commits
	
		
			11 Commits
		
	
	
		
			export_sal
			...
			0.1.6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 477405a094 | |||
| 4dae669397 | |||
| 937fe06de4 | |||
| 69185f2460 | |||
| 7ac28154eb | |||
| e7eda79c69 | |||
| 5f40b4098c | |||
|  | 80864137b6 | ||
|  | 2e8e956b69 | ||
| 2e4c6592a3 | |||
| 6b149b0134 | 
							
								
								
									
										4
									
								
								.env_example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.env_example
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| TRYTON_HOST=localhost | ||||
| TRYTON_DATABASE=tryton | ||||
| TRYTON_USERNAME=admin | ||||
| TRYTON_PASSWORD=admin | ||||
| @@ -18,6 +18,9 @@ TRYTON_HOST = os.environ.get('TRYTON_HOST', 'localhost') | ||||
| TRYTON_DATABASE = os.environ.get('TRYTON_DATABASE', 'tryton') | ||||
| TRYTON_USERNAME = os.environ.get('TRYTON_USERNAME', 'admin') | ||||
| TRYTON_PASSWORD = os.environ.get('TRYTON_PASSWORD', 'admin') | ||||
| TRYTON_COP_CURRENCY = 31 | ||||
| TRYTON_COMPANY_ID = 1 | ||||
| TRYTON_SHOPS = [1] | ||||
|  | ||||
|  | ||||
| class Pagination(PageNumberPagination): | ||||
| @@ -183,7 +186,8 @@ class SalesToTrytonView(APIView): | ||||
|         ) | ||||
|         tryton_client.connect() | ||||
|         method = 'model.sale.sale.create' | ||||
|         tryton_context = {} | ||||
|         tryton_context = {'company': TRYTON_COMPANY_ID, | ||||
|                           'shops': TRYTON_SHOPS} | ||||
|  | ||||
|         successful = [] | ||||
|         failed = [] | ||||
| @@ -219,10 +223,10 @@ class TrytonSale: | ||||
|  | ||||
|     def to_tryton(self): | ||||
|         return { | ||||
|             "company": 1, | ||||
|             "company": TRYTON_COMPANY_ID, | ||||
|             "shipment_address": self.sale.customer.address_external_id, | ||||
|             "invoice_address": self.sale.customer.address_external_id, | ||||
|             "currency": 1, | ||||
|             "currency": TRYTON_COP_CURRENCY, | ||||
|             "description": self.sale.description or '', | ||||
|             "party": self.sale.customer.external_id, | ||||
|             "reference": "don_confiao " + str(self.sale.id), | ||||
| @@ -279,9 +283,16 @@ class ProductsFromTrytonView(APIView): | ||||
|                     external_id=tryton_product.get('id') | ||||
|                 ) | ||||
|             except Product.DoesNotExist: | ||||
|                 product = self.__create_product(tryton_product) | ||||
|                 created_products.append(product.id) | ||||
|                 continue | ||||
|                 try: | ||||
|                     product = self.__create_product(tryton_product) | ||||
|                     created_products.append(product.id) | ||||
|                     continue | ||||
|                 except Exception as e: | ||||
|                     print(f"Error al importar productos: {e}" | ||||
|                           f"El producto: {tryton_product}") | ||||
|                     failed_products.append(tryton_product.get('id')) | ||||
|                     continue | ||||
|  | ||||
|             if self.__need_update(product, tryton_product): | ||||
|                 self.__update_product(product, tryton_product) | ||||
|                 updated_products.append(product.id) | ||||
| @@ -358,8 +369,6 @@ class CustomersFromTrytonView(APIView): | ||||
|         updated_customers = [] | ||||
|         created_customers = [] | ||||
|         untouched_customers = [] | ||||
|         print('aqui') | ||||
|         print(tryton_parties) | ||||
|  | ||||
|         for tryton_party in tryton_parties: | ||||
|             try: | ||||
| @@ -388,7 +397,7 @@ class CustomersFromTrytonView(APIView): | ||||
|         ) | ||||
|  | ||||
|     def __get_party_datails(self, party_ids, tryton_client, context): | ||||
|         tryton_fields = ['id', 'name'] | ||||
|         tryton_fields = ['id', 'name', 'addresses'] | ||||
|         method = 'model.party.party.read' | ||||
|         params = (party_ids, tryton_fields, context) | ||||
|         response = tryton_client.call(method, params) | ||||
| @@ -397,15 +406,22 @@ class CustomersFromTrytonView(APIView): | ||||
|     def __need_update(self, customer, tryton_party): | ||||
|         if not customer.name == tryton_party.get('name'): | ||||
|             return True | ||||
|         if tryton_party.get('addresses') and tryton_party.get('addresses')[0]: | ||||
|             if not customer.address_external_id == str(tryton_party.get('addresses')[0]): | ||||
|                 return True | ||||
|  | ||||
|     def __create_customer(self, tryton_party): | ||||
|         customer = Customer() | ||||
|         customer.name = tryton_party.get('name') | ||||
|         customer.external_id = tryton_party.get('id') | ||||
|         if tryton_party.get('addresses') and tryton_party.get('addresses')[0]: | ||||
|             customer.address_external_id = tryton_party.get('addresses')[0] | ||||
|         customer.save() | ||||
|         return customer | ||||
|  | ||||
|     def __update_customer(self, customer, tryton_party): | ||||
|         customer.name = tryton_party.get('name') | ||||
|         customer.external_id = tryton_party.get('id') | ||||
|         if tryton_party.get('addresses') and tryton_party.get('addresses')[0]: | ||||
|             customer.address_external_id = tryton_party.get('addresses')[0] | ||||
|         customer.save() | ||||
|   | ||||
| @@ -24,19 +24,19 @@ class TestCustomersFromTryton(TestCase): | ||||
|     def test_create_import_customer(self, mock_connect, mock_call): | ||||
|         def fake_call(*args, **kwargs): | ||||
|             party_search = 'model.party.party.search' | ||||
|             search_args = [[], 0, 1000, [['rec_name', 'ASC'], ['id', None]], {'company': 1}] | ||||
|             search_args = [[], 0, 1000, [['name', 'ASC'], ['id', None]], {'company': 1}] | ||||
|  | ||||
|             if (args == (party_search, search_args)): | ||||
|                 return [5, 6, 7, 8] | ||||
|  | ||||
|             party_read = 'model.party.party.read' | ||||
|             read_args = ([5, 6, 7, 8], ['id', 'name'], {'company': 1}) | ||||
|             read_args = ([5, 6, 7, 8], ['id', 'name', 'addresses'], {'company': 1}) | ||||
|             if (args == (party_read, read_args)): | ||||
|                 return [ | ||||
|                     {'id': 5, 'name': 'Carlos'}, | ||||
|                     {'id': 6, 'name': 'Cristian'}, | ||||
|                     {'id': 7, 'name': 'Ana'}, | ||||
|                     {'id': 8, 'name': 'José'}, | ||||
|                     {'id': 5, 'name': 'Carlos', 'addresses': [303]}, | ||||
|                     {'id': 6, 'name': 'Cristian', 'addresses': []}, | ||||
|                     {'id': 7, 'name': 'Ana', 'addresses': [302]}, | ||||
|                     {'id': 8, 'name': 'José', 'addresses': []}, | ||||
|                 ] | ||||
|  | ||||
|             raise Exception(f"Sorry, args non expected on  this test: {args}") | ||||
| @@ -60,7 +60,9 @@ class TestCustomersFromTryton(TestCase): | ||||
|         created_customer = Customer.objects.get(id=3) | ||||
|         self.assertEqual(created_customer.external_id, str(7)) | ||||
|         self.assertEqual(created_customer.name, 'Ana') | ||||
|         self.assertEqual(created_customer.address_external_id, str(302)) | ||||
|  | ||||
|         updated_customer = Customer.objects.get(id=1) | ||||
|         self.assertEqual(updated_customer.external_id, str(5)) | ||||
|         self.assertEqual(updated_customer.name, 'Carlos') | ||||
|         self.assertIn(updated_customer.address_external_id, str(303)) | ||||
|   | ||||
| @@ -19,7 +19,7 @@ class TestExportarVentasParaTryton(TestCase): | ||||
|         self.customer = Customer.objects.create( | ||||
|             name='Camilo', | ||||
|             external_id=1, | ||||
|             address_external_id=1 | ||||
|             address_external_id=307, | ||||
|         ) | ||||
|         self.sale = Sale.objects.create( | ||||
|             customer=self.customer, | ||||
| @@ -100,4 +100,4 @@ class TestExportarVentasParaTryton(TestCase): | ||||
|         self.assertEqual(updated_sale.external_id, external_id) | ||||
|         mock_connect.assert_called_once() | ||||
|         mock_call.assert_called_once() | ||||
|         mock_call.assert_called_with('model.sale.sale.create', [[{'company': 1, 'shipment_address': '1', 'invoice_address': '1', 'currency': 1, 'description': '', 'party': '1', 'reference': 'don_confiao 1', 'sale_date': {'__class__': 'date', 'year': 2024, 'month': 9, 'day': 2}, 'lines': [['create', [{'product': '1', 'quantity': {'__class__': 'Decimal', 'decimal': '2.00'}, 'type': 'line', 'unit': '1', 'unit_price': {'__class__': 'Decimal', 'decimal': '3000.00'}}, {'product': '1', 'quantity': {'__class__': 'Decimal', 'decimal': '3.00'}, 'type': 'line', 'unit': '1', 'unit_price': {'__class__': 'Decimal', 'decimal': '5000.00'}}]]]}], {}]) | ||||
|         mock_call.assert_called_with('model.sale.sale.create', [[{'company': 1, 'shipment_address': '307', 'invoice_address': '307', 'currency': 31, 'description': '', 'party': '1', 'reference': 'don_confiao 1', 'sale_date': {'__class__': 'date', 'year': 2024, 'month': 9, 'day': 2}, 'lines': [['create', [{'product': '1', 'quantity': {'__class__': 'Decimal', 'decimal': '2.00'}, 'type': 'line', 'unit': '1', 'unit_price': {'__class__': 'Decimal', 'decimal': '3000.00'}}, {'product': '1', 'quantity': {'__class__': 'Decimal', 'decimal': '3.00'}, 'type': 'line', 'unit': '1', 'unit_price': {'__class__': 'Decimal', 'decimal': '5000.00'}}]]]}], {'company': 1, 'shops': [1]}]) | ||||
|   | ||||
| @@ -85,3 +85,44 @@ class TestProductsFromTryton(TestCase): | ||||
|         self.assertEqual(updated_product.name, 'Panela2') | ||||
|         self.assertEqual(updated_product.price, Decimal('6000')) | ||||
|         self.assertEqual(updated_product.measuring_unit, 'Unit') | ||||
|  | ||||
|     @patch('sabatron_tryton_rpc_client.client.Client.call') | ||||
|     @patch('sabatron_tryton_rpc_client.client.Client.connect') | ||||
|     def test_import_duplicated_name_products(self, mock_connect, mock_call): | ||||
|         mock_connect.return_value = None | ||||
|         def fake_call(*args, **kwargs): | ||||
|             product_search = 'model.product.product.search' | ||||
|             search_args = [[["salable", "=", True]], 0, 1000, [['rec_name', 'ASC'], ['id', None]], {'company': 1}] | ||||
|             if (args == (product_search, search_args)): | ||||
|                 return [200] | ||||
|  | ||||
|             product_read = 'model.product.product.read' | ||||
|             product_args = ([200], | ||||
|                             ['id', 'name', 'default_uom.id', | ||||
|                              'default_uom.rec_name', 'list_price'], | ||||
|                             {'company': 1} | ||||
|                             ) | ||||
|             if (args == (product_read, product_args)): | ||||
|                 return [ | ||||
|                     {'id': 200, 'list_price': Decimal('25000'), | ||||
|                      'name': self.product.name, | ||||
|                      'default_uom.': {'id': 1, 'rec_name': 'Unit'}}, | ||||
|                 ] | ||||
|  | ||||
|             raise Exception(f"Sorry, args non expected on  this test: {args}") | ||||
|  | ||||
|         mock_call.side_effect = fake_call | ||||
|  | ||||
|         url = '/don_confiao/api/importar_productos_de_tryton' | ||||
|         response = self.client.post(url) | ||||
|         self.assertEqual(response.status_code, 200) | ||||
|  | ||||
|         content = json.loads(response.content.decode('utf-8')) | ||||
|         expected_response = { | ||||
|             'checked_tryton_products': [200], | ||||
|             'created_products': [], | ||||
|             'untouched_products': [], | ||||
|             'failed_products': [200], | ||||
|             'updated_products': [], | ||||
|         } | ||||
|         self.assertEqual(content, expected_response) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user