diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-06-12 14:52:46 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-06-12 14:52:46 +0700 |
| commit | 762444b0e678b160108c4f12d63c7896ce0a132b (patch) | |
| tree | 432b05ff0bf5d55dacd7dff9ecc597cd2abe4996 /indoteknik_api | |
| parent | 9c31b4af2a2611fe9338e879eee48957273dbe10 (diff) | |
(hafid) fix tidak bisa edit alamat pada website
Diffstat (limited to 'indoteknik_api')
| -rw-r--r-- | indoteknik_api/controllers/api_v1/partner.py | 182 |
1 files changed, 99 insertions, 83 deletions
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index 126fded4..c0f8f630 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -61,46 +61,48 @@ class Partner(controller.Controller): partner = request.env['res.users'].api_address_response(partner) return self.response(partner) - @http.route(prefix + 'partner/<id>/address', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) + @http.route(prefix + 'partner/<id>/address', type="json", auth='public', methods=['PUT', 'OPTIONS'], csrf=False, cors='*') @controller.Controller.must_authorized() - def write_partner_address_by_id(self, **kw): + def write_partner_address_by_id(self, id, **kw): + headers = { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', + 'Access-Control-Allow-Headers': '*' + } + if request.httprequest.method == 'OPTIONS': + return Response(status=200, headers=headers) try: - params = self.get_request_params(kw, { - 'id': ['required', 'number'], - 'type': ['default:other'], - 'name': ['required'], - 'email': ['required'], - 'mobile': ['required'], - 'phone': [''], - 'street': ['required'], - 'state_id': ['required', 'number', 'alias:state_id'], - 'city_id': ['required', 'number', 'alias:kota_id'], - 'district_id': ['number', 'alias:kecamatan_id'], - 'sub_district_id': ['number', 'alias:kelurahan_id', 'exclude_if_null'], - 'zip': ['required'], - 'longtitude': '', - 'latitude': '', - 'address_map': [], - 'alamat_lengkap_text': [] - }) + params = self.get_request_params(request.jsonrequest, { + 'id': ['required', 'number'], + 'type': ['default:other'], + 'name': ['required'], + 'email': ['required'], + 'mobile': ['required'], + 'phone': [''], + 'street': ['required'], + 'state_id': ['required', 'alias:state_id'], + 'city_id': ['required', 'alias:kota_id'], + 'district_id': ['alias:kecamatan_id'], + 'sub_district_id': ['alias:kelurahan_id', 'exclude_if_null'], + 'zip': ['required'], + 'longtitude': '', + 'latitude': '', + 'address_map': [], + 'alamat_lengkap_text': [] + }) if not params['valid']: - return self.response(code=400, description=params) - - partner = request.env[self._name].sudo().search([('id', '=', params['value']['id'])], limit=1) + return {'headers' : headers,'code': 400, 'description': params} + partner = request.env['res.partner'].sudo().search([('id', '=', id)], limit=1) if not partner: - return self.response(code=404, description='User not found') - - try: - partner.write(params['value']) - except Exception as e: - return self.response(code=500, description=f'Error writing partner data: {str(e)}') + return {'headers' : headers,'code': 404, 'description': 'User not found'} - return self.response({'id': partner.id}) + partner.write(params['value']) + return {'id': partner.id, 'headers' : headers} except Exception as e: - return self.response(code=500, description=f'Unexpected error: {str(e)}') + return {'headers' : headers,'code': 500, 'description': f'Internal Error: {str(e)}'} @http.route(prefix + 'partner/address', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() @@ -132,69 +134,83 @@ class Partner(controller.Controller): 'id': partner.id, }) - @http.route(prefix + 'partner/<id>', auth='public', methods=['PUT', 'OPTIONS'], csrf=False) + @http.route(prefix + 'partner/<int:id>', auth='public', methods=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized() - def write_partner_by_id(self, **kw): - params = self.get_request_params(kw, { - 'id': ['', 'number'], - 'name': [], - 'company_type_id': ['number'], - 'industry_id': ['number'], - 'tax_name': ['alias:nama_wajib_pajak'], - 'npwp': [], - 'alamat_lengkap_text': [], - 'street': [], - 'email': [], - 'mobile': [] - }) - id_user = self.get_request_params(kw, { - 'id_user': ['number'] - }) - params_user = self.get_request_params(kw, { - 'company_type_id': ['number'], - 'industry_id': ['number'], - 'tax_name': ['alias:nama_wajib_pajak'], - 'npwp': [], - 'alamat_lengkap_text': [], - }) + def write_partner_by_id(self, id, **kw): + try: + # Ambil data JSON langsung + request_data = kw + + partner = request.env['res.partner'].sudo().browse(id) + if not partner.exists(): + return self.response({ + 'code': 400, + 'description': 'Partner not found' + }) - if not params['valid']: - return self.response(code=400, description=params) + partner_params = self.get_request_params(request_data, { + 'tax_name': ['alias:nama_wajib_pajak'], + 'company_type_id': ['number'], + 'industry_id': ['number'], + 'npwp': [], + 'alamat_lengkap_text': [], + 'street': [], + 'email': [], + 'mobile': [] + }) - partner = request.env[self._name].search([('id', '=', params['value']['id'])], limit=1) - user = request.env[self._name].search([('id', '=', id_user['value']['id_user'])], limit=1) - if not partner: - return self.response(code=404, description='Partner not found') + if not partner_params['valid']: + return self.response({ + 'code': 400, + 'description': partner_params + }) - if not params['value'].get('tax_name'): - params['value']['nama_wajib_pajak'] = params['value'].get('name') - params_user['value']['nama_wajib_pajak'] = params_user['value'].get('name') + partner_values = partner_params['value'] - if not params['value'].get('alamat_lengkap_text'): - params['value']['alamat_lengkap_text'] = params['value'].get('street') - params_user['value']['alamat_lengkap_text'] = params_user['value'].get('street') + if 'id_user' in request_data: + user_params = self.get_request_params(request_data, { + 'id_user': ['required', 'number'], + 'company_type_id': ['number'], + 'industry_id': ['number'], + 'tax_name': ['alias:nama_wajib_pajak'], + 'npwp': [], + 'alamat_lengkap_text': [], + }) - if not params['value'].get('npwp'): - params['value']['npwp'] = "00.000.000.0-000.000" - params_user['value']['npwp'] = "00.000.000.0-000.000" + if not user_params['valid']: + return self.response({ + 'code': 400, + 'description': user_params + }) - # Filter parameter yang memiliki nilai saja untuk partner - params_filtered = {k: v for k, v in params['value'].items() if v} + user = request.env['res.partner'].sudo().browse(int(user_params['value']['id_user'])) + if user.exists(): + user_values = user_params['value'] - # Filter parameter yang memiliki nilai saja untuk user - params_user_filtered = {k: v for k, v in params_user['value'].items() if v} + if not user_values.get('tax_name'): + user_values['nama_wajib_pajak'] = user_values.get('name', user.name) - # Update partner dan user hanya dengan parameter yang memiliki nilai - if params_filtered: - partner.write(params_filtered) + if not user_values.get('alamat_lengkap_text'): + user_values['alamat_lengkap_text'] = user_values.get('street', user.street) - if params_user_filtered: - user.write(params_user_filtered) + if not user_values.get('npwp'): + user_values['npwp'] = "00.000.000.0-000.000" - # Return response dengan ID partner yang di-update - return self.response({ - 'id': partner.id - }) + user_values_filtered = {k: v for k, v in user_values.items() if k != 'id_user' and v is not None} + if user_values_filtered: + user.write(user_values_filtered) + + partner.write(partner_values) + + return self.response({ + 'partner_id': partner.id + }) + + except Exception as e: + return self.response({ + 'code': 500, + 'description': f'Internal Error: {str(e)}' + }) @http.route(prefix + 'partner/industry', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() |
