diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 00000000..fed9a2ce --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,7 @@ +{ + "permissions": { + "allow": [ + "Bash(dir:*)" + ] + } +} diff --git a/FruitBankHybrid.Shared/Components/Grids/ShippingDocuments/GridShippingDocumentInfoPanel.razor b/FruitBankHybrid.Shared/Components/Grids/ShippingDocuments/GridShippingDocumentInfoPanel.razor index ce829b7d..7f3320ff 100644 --- a/FruitBankHybrid.Shared/Components/Grids/ShippingDocuments/GridShippingDocumentInfoPanel.razor +++ b/FruitBankHybrid.Shared/Components/Grids/ShippingDocuments/GridShippingDocumentInfoPanel.razor @@ -1,28 +1,83 @@ @using AyCode.Blazor.Components.Components.Grids @using DevExpress.Blazor @using FruitBank.Common.Entities +@using System.IO +@inject IJSRuntime JS - + @*
?? - Sz醠l韙髄ev閘 r閟zletei + Sz谩ll铆t贸lev茅l r茅szletei
-
- - +
*@ + + @* @if (dataItem is ShippingDocument doc) {
Partner: @doc.Partner?.Name
} -
- - + *@ + + + @if (dataItem is ShippingDocument doc) + { + + + + + + + + + + + + + @foreach (var shippingItem in doc.ShippingItems) + { + + + + + + + + + } + +
Term茅k neveN茅v a dokumentumonRaklapokMennyis茅gNet.s煤lyBrt.s煤ly
@shippingItem.ProductName@shippingItem.NameOnDocument@shippingItem.QuantityOnDocument@shippingItem.NetWeightOnDocument@shippingItem.GrossWeightOnDocument@shippingItem.PalletsOnDocument
+ +
+
+ } +
+ + @*
- +
-
+
*@
+ +@code +{ + private readonly string[] _pdfFiles = new[] + { + "1_Albaran_AH25007715.pdf", + "2_BANK FRA.pdf", + "3_BP-30M35_20251113_163816.pdf" + }; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + var pdfUrls = _pdfFiles.Select(f => $"_content/FruitBankHybrid.Shared/uploads/{f}").ToArray(); + await JS.InvokeVoidAsync("pdfViewer.renderPdfs", "pdfContainer", pdfUrls); + } + } +} diff --git a/FruitBankHybrid.Shared/Components/MgGridBase.cs b/FruitBankHybrid.Shared/Components/MgGridBase.cs index 3b673089..0553bc0b 100644 --- a/FruitBankHybrid.Shared/Components/MgGridBase.cs +++ b/FruitBankHybrid.Shared/Components/MgGridBase.cs @@ -44,6 +44,15 @@ public class MgGridBase : DxGrid, IMgGridBase /// public IInfoPanelBase? InfoPanelInstance { get; set; } + /// + public bool IsFullscreen => false; + + /// + public void ToggleFullscreen() + { + // Not implemented in this legacy class - will be removed + } + [Inject] public required IEnumerable LogWriters { get; set; } [Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; } [Inject] public required LoggedInModel LoggedInModel { get; set; } diff --git a/FruitBankHybrid.Shared/wwwroot/js/pdfViewer.js b/FruitBankHybrid.Shared/wwwroot/js/pdfViewer.js new file mode 100644 index 00000000..3f578030 --- /dev/null +++ b/FruitBankHybrid.Shared/wwwroot/js/pdfViewer.js @@ -0,0 +1,134 @@ +window.pdfViewer = { + _pdfCache: new Map(), + _resizeObserver: null, + _currentContainerId: null, + _currentPdfUrls: null, + _renderTimeout: null, + + renderPdfs: async function (containerId, pdfUrls) { + // Wait for container to be available + let container = null; + for (let i = 0; i < 50; i++) { + container = document.getElementById(containerId); + if (container) break; + await new Promise(resolve => setTimeout(resolve, 100)); + } + + if (!container) { + console.error('Container not found after waiting:', containerId); + return; + } + + // Store for resize handling + this._currentContainerId = containerId; + this._currentPdfUrls = pdfUrls; + + // Setup resize observer + this._setupResizeObserver(container); + + // Initial render + await this._doRender(container, pdfUrls); + }, + + _setupResizeObserver: function(container) { + // Clean up previous observer + if (this._resizeObserver) { + this._resizeObserver.disconnect(); + } + + let lastWidth = container.clientWidth; + + this._resizeObserver = new ResizeObserver((entries) => { + const newWidth = entries[0].contentRect.width; + // Only re-render if width changed significantly (more than 5px) + if (Math.abs(newWidth - lastWidth) > 5) { + lastWidth = newWidth; + // Debounce the re-render + if (this._renderTimeout) { + clearTimeout(this._renderTimeout); + } + this._renderTimeout = setTimeout(() => { + this._doRender(container, this._currentPdfUrls); + }, 150); + } + }); + + this._resizeObserver.observe(container); + }, + + _doRender: async function(container, pdfUrls) { + container.innerHTML = ''; + + if (typeof pdfjsLib === 'undefined') { + console.error('PDF.js not loaded'); + container.innerHTML = '

PDF.js nincs bet枚ltve

'; + return; + } + + const pixelRatio = window.devicePixelRatio || 1; + const scrollbarWidth = 17; + const containerWidth = container.clientWidth - scrollbarWidth; + + if (containerWidth <= 0) { + console.log('Container width is 0, skipping render'); + return; + } + + console.log('Rendering PDFs at width:', containerWidth); + + for (const url of pdfUrls) { + try { + // Use cached PDF if available + let pdf = this._pdfCache.get(url); + if (!pdf) { + console.log('Loading PDF:', url); + const loadingTask = pdfjsLib.getDocument(url); + pdf = await loadingTask.promise; + this._pdfCache.set(url, pdf); + } + + for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) { + const page = await pdf.getPage(pageNum); + + const viewport = page.getViewport({ scale: 1 }); + const scale = containerWidth / viewport.width; + const displayHeight = viewport.height * scale; + const scaledViewport = page.getViewport({ scale: scale * pixelRatio }); + + const canvas = document.createElement('canvas'); + canvas.width = scaledViewport.width; + canvas.height = scaledViewport.height; + canvas.style.width = containerWidth + 'px'; + canvas.style.height = displayHeight + 'px'; + canvas.style.marginBottom = '8px'; + canvas.style.display = 'block'; + container.appendChild(canvas); + + const context = canvas.getContext('2d'); + await page.render({ + canvasContext: context, + viewport: scaledViewport + }).promise; + } + } catch (error) { + console.error('Error rendering PDF:', url, error); + const errorDiv = document.createElement('div'); + errorDiv.textContent = 'Hiba a PDF bet枚lt茅sekor: ' + url + ' - ' + error.message; + errorDiv.style.color = 'red'; + errorDiv.style.marginBottom = '8px'; + container.appendChild(errorDiv); + } + } + }, + + dispose: function() { + if (this._resizeObserver) { + this._resizeObserver.disconnect(); + this._resizeObserver = null; + } + if (this._renderTimeout) { + clearTimeout(this._renderTimeout); + } + this._pdfCache.clear(); + } +}; diff --git a/FruitBankHybrid.Shared/wwwroot/uploads/1_Albaran_AH25007715.pdf b/FruitBankHybrid.Shared/wwwroot/uploads/1_Albaran_AH25007715.pdf new file mode 100644 index 00000000..8cf2f065 --- /dev/null +++ b/FruitBankHybrid.Shared/wwwroot/uploads/1_Albaran_AH25007715.pdf @@ -0,0 +1,46 @@ +Fecha Cliente Albar谩n FRUITBANK KFT (BONFRED MERCA-BARNA) + HU14902170 +12/11/2025 506619 AH25007715 MERCA-BARNA + +Trasportista: HNOS. GUERRERO HARO S.L. 08040-BARCELONA + Barcelona +Matr铆cula: / Porte: Origen ESPA脩A + +Incoterm: CPT Volumen:1,0 Palet + +Fecha Entrega: 13/11/2025 + +Descripci贸n Bultos Piezas K.Neto Precio Suma %Iva + 6,25B +AGUACATE BACON GLOBALG.A.P. CAL. 14 77 481,25 0 + +Envase: CT MANZANO NEGRO 40*30*9.5 + +CAT: I - Origen: ESPA脩A + +AGUACATE BACON GLOBALG.A.P. CAL. 20 115 6,25B 718,75 0 + +Envase: CT MANZANO NEGRO 40*30*9.5 + +CAT: I - Origen: ESPA脩A + +AGUACATE HASS GLOBALG.A.P. CAL. 20 48 13,50B 648,00 0 + +Envase: CT MANZANO NEGRO 40*30*9.5 + +CAT: I - Origen: PERU + +Producto Certif. GLOBALG.A.P. GGN: 8436025340012 + +Bultos Sumas Dto 1 Dto 2 B.Imponible %Iva Iva Total + 240 0,00 0,00% 0,00 1.848,00 0% 0,00 1.848,00 + 1.848,00 0,00% + +FRUTAS RAFAEL MANZANO E HIJOS S.L. no se responsabiliza de ninguna reclamaci贸n por no conformidad de la mercanc铆a, que no haya sido comunicada +por escrito en un plazo m谩ximo de DOS D脥AS desde la recepci贸n de la misma, debiendo acompa帽ar justificaci贸n de la no conformidad (informe pericial +efectuado por profesional acreditado) adem谩s del detalle de los n煤meros de lotes y cajas no conformes. +En las ventas a consignaci贸n, FRUTAS RAFAEL MANZANO E HIJOS S.L. establece un per铆odo de tiempo no superior a 20 D脥AS para acordar el precio de +facturaci贸n de la mercanc铆a enviada. Transcurrido 茅ste plazo son acordarlo, ser谩 facturada al valor del precio medio de mercado que tuviese el producto +el d铆a en que se recepcion贸 la mercanc铆a, incrementando el importe del transporte , si es por cuenta de FRUTAS RAFAEL MANZANO E HIJOS S.L. +N潞 Registro de Productores de Producto: ENV/2023/000016586. + diff --git a/FruitBankHybrid.Shared/wwwroot/uploads/2_BANK FRA.pdf b/FruitBankHybrid.Shared/wwwroot/uploads/2_BANK FRA.pdf new file mode 100644 index 00000000..b596d210 --- /dev/null +++ b/FruitBankHybrid.Shared/wwwroot/uploads/2_BANK FRA.pdf @@ -0,0 +1,38 @@ + F A C T U R A de V E N T A + +Victor i Merce , S.L. FECHA NUMERO CIF / NIF P脕GINA +Mercabarna, Pab.F-6035-6036 13/11/2025 FV-015444 HU14902170 1 de 1 +08040 Barcelona Barcelona (Spain) +C.I.F.: ESB61478095 FRUIT BANK KFT +Tlf: 93 335 02 44 RIPPL-RONAI UTCA 18 +comercialventas@victorimerce.com 1068 BUDAPEST + HUNGRIA (HU) +IBAN: ES08 2100 0749 16 0200163991 +BIC:CAIXESBBXXX CAIXESBBXXX + +IBAN: +BIC:CAIXESBBXXX + + LOTE ARTICULO ENV BULTOS BRUTO TARA NETO PRECIO IMPORTE + +3501544401003 PERA WILLIAMS I *16* ESP. 192 927,00 0,40 850,20 1,90 1.615,38 +3501544402000 PERA WILLIAMS I *16* ESP. 0,40 832,20 1,90 1.581,18 +3501544403007 PERA WILLIAMS I *18* ESP. ES 192 909,00 0,40 863,20 1,80 1.553,76 +3501544404004 PERA WILLIAMS I *20* ESP. 0,40 643,20 1,70 1.093,44 + 192 940,00 + + 192 720,00 + + Recib铆: Total Mercanc铆a 5.843,76 + Fianza por envases 0,00 + Vencimiento a: 30 d铆as Base Imponible + IVA al 0,00% 5.843,76 + R. Equivalencia al 0,00% 0,00 + 0,00 + Total + 5.843,76 + +Informaci贸n B谩sica Sobre Protecci贸n De Datos - Gesti贸n econ贸mica y administrativa. Responsable: VICTOR I MERCE FRUITS SL. Finalidad: Gesti贸n administrativa, facturaci贸n, contabilidad y obligaciones legales. Derechos: Acceder, +rectificar y suprimir los datos, as铆 como otros derechos, como se explica en la informaci贸n adicional. Informaci贸n adicional. Puede consultar la informaci贸n adicional y detallada sobre Protecci贸n de Datos en la siguiente direcci贸n de +correo electr贸nico gerencia@victorimerce.com. + diff --git a/FruitBankHybrid.Shared/wwwroot/uploads/3_BP-30M35_20251113_163816.pdf b/FruitBankHybrid.Shared/wwwroot/uploads/3_BP-30M35_20251113_163816.pdf new file mode 100644 index 00000000..96b8f78f --- /dev/null +++ b/FruitBankHybrid.Shared/wwwroot/uploads/3_BP-30M35_20251113_163816.pdf @@ -0,0 +1 @@ + diff --git a/FruitBankHybrid.Shared/wwwroot/uploads/4_pdfdoc_12112025_1735501.pdf b/FruitBankHybrid.Shared/wwwroot/uploads/4_pdfdoc_12112025_1735501.pdf new file mode 100644 index 00000000..5d03da78 --- /dev/null +++ b/FruitBankHybrid.Shared/wwwroot/uploads/4_pdfdoc_12112025_1735501.pdf @@ -0,0 +1,74 @@ + MANIPULADO TERCEROS + + CARRETERA N-340, KM. 415 . EL EJIDO . 04710 . ALMER脥A . ESPA脩A + . Tels. +34 950 347300 . Fax +34 950 581627 + E-mail:terceros@hcostadealmeria.es . Web:http://www.hcostadealmeria.es + + FRUITBANK KFT ALBAR脕N FECHA fra_26008338 + RIPPL-RONAI U.18 6 - 749 12/11/2025 + BUDAPEST 1068 FACTURA + HUNGRIA FECHA N.I.F. 06-549 + HUNGR脥A 12/11/2025 HU14902170 + CLIENTE + 6705 + +Descripci贸n Bultos Piezas K.netos Precio Importe + +PRODUCTO GLOBALG.A.P. Y SPRING GGN 8429302390008 70 0 + 220 0 +Origen del producto: ESPA脩A 40 0 + +Albaran: 749 + +PTO CALIFORNIA VERDE 400X300X185/19 I GG QDELICIAS 350 1,7000 595,00 + 1.100 2,4500 2.695,00 +PTO CALIFORNIA ROJO 400X300X185 I GG QDELICIAS 1,9000 380,00 + 200 +PTO CALIFORNIA AMARILLO 400X300X185 I GG QDELICIAS + +Observaciones: 3 PALETS 100X120 + + 330 0 1.650 3.670,00 + 3.670,00鈧 +CONDICIONES DE COMPRA-VENTA Base imponible % Importe I.V.A. % Importe R.E. + 3.670,00鈧 +1潞 Recib铆, con completa conformidad mercac铆as, precios, 0,00 0,00 0,00 0,00 + +envases e importe total de compra aqu铆 realizada. 3.670,00 / TOTAL FACTURA +2潞 El envasado y carga de la mercanc铆a son a cargo del EXW + +comprador. + +3潞 En caso de litigio el comprador renuncia a su propio + +fuero y se someta a la competecia de los Juzgados de Almer铆a. + +4潞 Se trata de venta en origen, recordamos de su exigencia + +de normalizar la venta de destino seg煤n la legislaci贸n vigente + +(R.D. 2192/84). El comprado o persona autorizada + +5潞 MANIPULADO TERCEROS, no se responsa- Matricula vehiculo: +biliza de ninguna reclamaci贸n que no haya sido comunicada CLA脷SULA INCOTERMS: +por escrito en un plazo m谩ximo de 48 horas desde la + +recepci贸n de la mercanc铆a. + +FACTURA FECHA CLIENTE INSTRUCCIONES DE PAGO: +549 12/11/2025 6705 - FRUITBANK KFT A Vencimiento, sirvase ingresar en nuestra cuenta, como sigue: +ENVASES -Banco: CAJAMAR (CAJA RURAL INTERMEDITERR脕NEA S.C.C) + ENTREGA RETIRA + + -Entidad/Sucursal: 3058-0040 + + -IBAN: ES6730580040381011800052 + + -Swift Code: CCRIES2A + + -Beneficiario: HORTOFRUTICOLA COSTA DE ALMERIA, S.L. + + CIF:B04257028 + +DIRECCI脫N FISCAL: HORTOFRUT脥COLA COSTA DE ALMER脥A, S.L.; PLAZA HUERTA DE EUROPA, 1; 04740; ROQUETAS DE MAR; ALMER脥A; ESPA脩A; TELS. +34950326232; INFO@HCOSTADEALMERIA.ES + diff --git a/FruitBankHybrid.Shared/wwwroot/uploads/5_SO0041211631075652.pdf b/FruitBankHybrid.Shared/wwwroot/uploads/5_SO0041211631075652.pdf new file mode 100644 index 00000000..ec98605d --- /dev/null +++ b/FruitBankHybrid.Shared/wwwroot/uploads/5_SO0041211631075652.pdf @@ -0,0 +1,45 @@ +Invoice To Sales order Confirmation +Fruitbank Kft +Rippl - Ronai 18 Invoice Date : 13/11/2025 +1068 BUDAPEST Delivery Date : 13/11/2025 +HUNGARY Currency : EUR + Order Number : 637462 +Delivered To Order Reference : +Fruitbank KFT Customer VAT No +Rippl - Ronai 18 Payment Terms : HU14902170 +1068 BUDAPEST : 21 Days after invoice date +HUNGARY + + Gross Net Unit VAT Total + +Product Variety Size C.O Qty Weight Weight Price (%) Price +Blackberries - +Blueberries - 12x125g NL 10 20,00 15,00 30,00 0 300,00 +Limes Tahiti +Mango by air Kent 12x125g 18+ PE 390 752,00 585,00 11,00 0 4.290,00 +Red currant - + 42 BR 240 1.067,00 960,00 6,75 0 1.620,00 +Total + 9 BR 15 99,70 90,00 33,00 0 495,00 + + 12x125g NL 20 42,50 30,00 17,50 0 350,00 + + 675 1.981,20 1.680,00 7.055,00 + +Roveg Fruit B.V. Roveg Tel +31 (0)180-635700 Handelsregister 30166109 EURO/GBP/USD: NL59 RABO 0316 9215 64 +Nijverheidsweg 20 Roveg Fax +31 (0)180-635750 BTW nr NL808838210B01 +2742 RG Waddinxveen Email db@roveg.nl Swift: RABONL2U +PO Box 309 www.roveg.nl +2740 AH Waddinxveen Global GAP CoC 8713807000006 + + Global GAP NG: Non Global GAP + + NL-BIO-01 SKAL 018903 + +The terms and conditions of Roveg Fruit B.V., with its registered office in Waddinxveen, are filed at the Chamber of Commerce +Rotterdam No 30166109. The terms and conditions apply to all transactions and are available on request. +The exporter of the products covered by this document (customs authorization NL/311/01/826) declares that, except where otherwise +clearly indicated, these products are of EU preferential origin + + Pagina 1 van 1 + diff --git a/FruitBankHybrid.Web/Components/App.razor b/FruitBankHybrid.Web/Components/App.razor index 4190e758..36d54e7d 100644 --- a/FruitBankHybrid.Web/Components/App.razor +++ b/FruitBankHybrid.Web/Components/App.razor @@ -26,6 +26,11 @@ + + +