main #7

Merged
admin merged 620 commits from main into dev 2026-03-29 13:03:25 +00:00
Showing only changes of commit d9ab3cfe47 - Show all commits

View File

@@ -1,6 +1,7 @@
from trytond.model import ModelSQL, ModelView, fields from trytond.model import ModelSQL, ModelView, fields
from trytond.pool import Pool from trytond.pool import Pool
import datetime from decimal import Decimal
from datetime import datetime as dt
class WeightReport(ModelSQL, ModelView): class WeightReport(ModelSQL, ModelView):
'Weight Report' 'Weight Report'
@@ -64,47 +65,116 @@ class WeightReport(ModelSQL, ModelView):
# def export_json(cls, reports): # def export_json(cls, reports):
# pass # pass
# @classmethod @classmethod
# def create_from_json(cls, json_data): def create_from_json(cls, json_data):
# """Crée un rapport à partir de données JSON""" """Crée un rapport à partir de données JSON"""
# report = cls() pool = Pool()
Party = pool.get('party.party')
Vessel = pool.get('trade.vessel')
Location = pool.get('stock.location')
# # Mapping des données JSON vers les champs du modèle # Préparer les données
# report.lab = json_data.get('lab', '') report = {}
# report_data = json_data.get('report', {})
# report.reference = report_data.get('reference', '')
# report.file_no = report_data.get('file_no', '')
# report.report_date = report_data.get('date', '')
# contract_data = json_data.get('contract', {}) # 1. Identification (champs simples)
# report.contract_no = contract_data.get('contract_no', '') report['lab'] = json_data.get('lab', '')
# report.invoice_no = contract_data.get('invoice_no', '')
# report.lc_no = contract_data.get('lc_no', '')
# report.origin = contract_data.get('origin', '')
# report.commodity = contract_data.get('commodity', '')
# parties_data = json_data.get('parties', {}) # 2. Report Information
# report.seller = parties_data.get('seller', '') report_data = json_data.get('report', {})
# report.buyer = parties_data.get('buyer', '') report['reference'] = report_data.get('reference', '')
# report.carrier = parties_data.get('carrier', '') report['file_no'] = report_data.get('file_no', '')
# shipment_data = json_data.get('shipment', {}) # Conversion de la date (format: "28 October 2025")
# report.vessel = shipment_data.get('vessel', '') date_str = report_data.get('date', '')
# report.bl_no = shipment_data.get('bl_no', '') if date_str:
# report.bl_date = shipment_data.get('bl_date', '') try:
# report.port_loading = shipment_data.get('port_loading', '') report['report_date'] = dt.strptime(date_str, '%d %B %Y').date()
# report.port_destination = shipment_data.get('port_destination', '') except:
# report.arrival_date = shipment_data.get('arrival_date', '') report['report_date'] = None
# report.weighing_place = shipment_data.get('weighing_place', '')
# report.weighing_method = shipment_data.get('weighing_method', '')
# report.bales = shipment_data.get('bales', 0)
# weights_data = json_data.get('weights', {}) # 3. Contract Information
# report.gross_landed_kg = weights_data.get('gross_landed_kg', 0) contract_data = json_data.get('contract', {})
# report.tare_kg = weights_data.get('tare_kg', 0) report['contract_no'] = contract_data.get('contract_no', '')
# report.net_landed_kg = weights_data.get('net_landed_kg', 0) report['invoice_no'] = contract_data.get('invoice_no', '')
# report.invoice_net_kg = weights_data.get('invoice_net_kg', 0) report['lc_no'] = contract_data.get('lc_no', '')
# report.gain_loss_kg = weights_data.get('gain_loss_kg', 0) report['origin'] = contract_data.get('origin', '')
# report.gain_loss_percent = weights_data.get('gain_loss_percent', 0) report['commodity'] = contract_data.get('commodity', '')
# return report # 4. Parties Information (Many2One)
parties_data = json_data.get('parties', {})
# Recherche ou création des parties
seller_name = parties_data.get('seller', '')
if seller_name:
seller = Party.find_or_create_by_name(seller_name)
report['seller'] = seller.id if seller else None
buyer_name = parties_data.get('buyer', '')
if buyer_name:
buyer = Party.find_or_create_by_name(buyer_name)
report['buyer'] = buyer.id if buyer else None
carrier_name = parties_data.get('carrier', '')
if carrier_name:
carrier = Party.find_or_create_by_name(carrier_name)
report['carrier'] = carrier.id if carrier else None
# 5. Shipment Information
shipment_data = json_data.get('shipment', {})
# Recherche du navire par nom
vessel_name = shipment_data.get('vessel', '')
if vessel_name:
vessel = Vessel.search([('vessel_name', '=', vessel_name)], limit=1)
report['vessel'] = vessel[0].id if vessel else None
report['bl_no'] = shipment_data.get('bl_no', '')
# Conversion de la date B/L (format: "16-Aug-2025")
bl_date_str = shipment_data.get('bl_date', '')
if bl_date_str:
try:
report['bl_date'] = dt.strptime(bl_date_str, '%d-%b-%Y').date()
except:
report['bl_date'] = None
# Ports (Many2One - nécessite recherche par nom)
port_loading_name = shipment_data.get('port_loading', '')
if port_loading_name:
port_loading = Location.search([
('name', '=', port_loading_name),
('type', '=', 'storage')
], limit=1)
report['port_loading'] = port_loading[0].id if port_loading else None
port_destination_name = shipment_data.get('port_destination', '')
if port_destination_name:
port_destination = Location.search([
('name', '=', port_destination_name),
('type', '=', 'storage')
], limit=1)
report['port_destination'] = port_destination[0].id if port_destination else None
# Conversion de la date d'arrivée (format: "20-Oct-2025")
arrival_date_str = shipment_data.get('arrival_date', '')
if arrival_date_str:
try:
report['arrival_date'] = dt.strptime(arrival_date_str, '%d-%b-%Y').date()
except:
report['arrival_date'] = None
report['weighing_place'] = shipment_data.get('weighing_place', '')
report['weighing_method'] = shipment_data.get('weighing_method', '')
report['bales'] = int(shipment_data.get('bales', 0) or 0)
# 6. Weights Information
weights_data = json_data.get('weights', {})
report['gross_landed_kg'] = Decimal(weights_data.get('gross_landed_kg', 0) or 0)
report['tare_kg'] = Decimal(weights_data.get('tare_kg', 0) or 0)
report['net_landed_kg'] = Decimal(weights_data.get('net_landed_kg', 0) or 0)
report['invoice_net_kg'] = Decimal(weights_data.get('invoice_net_kg', 0) or 0)
report['gain_loss_kg'] = Decimal(weights_data.get('gain_loss_kg', 0) or 0)
report['gain_loss_percent'] = Decimal(weights_data.get('gain_loss_percent', 0) or 0)
# 7. Création du rapport
return cls.create([report])[0]