From 2428f615a623e724e9153e661a8f05bae3af7d79 Mon Sep 17 00:00:00 2001 From: fedpo Date: Tue, 27 Aug 2024 04:36:00 +0100 Subject: [PATCH] HAY UN AVANCE --- .vs/Final_OOP/v17/.suo | Bin 197120 -> 207360 bytes Controladora/ControladoraCategorias.cs | 16 - Controladora/ControladoraClientes.cs | 11 - Controladora/ControladoraPresupuestos.cs | 2 +- .../ControladoraProductoNoPercedero.cs | 47 +- Controladora/ControladoraProductoPercedero.cs | 40 +- Controladora/ControladoraProductos.cs | 2 +- Entidades/Categoria.cs | 5 +- Entidades/Detalle.cs | 2 +- Entidades/DetalleOrdenDeCompra.cs | 1 - Entidades/Factura.cs | 3 +- Entidades/OrdenDeCompra.cs | 4 +- Entidades/Presupuesto.cs | 2 +- Entidades/Producto.cs | 9 +- Entidades/Remito.cs | 4 +- Informes/bin/Debug/net8.0/Entidades.dll | Bin 17920 -> 17408 bytes Informes/bin/Debug/net8.0/Entidades.pdb | Bin 17576 -> 17468 bytes Informes/bin/Debug/net8.0/Informes.dll | Bin 8704 -> 8704 bytes Informes/bin/Debug/net8.0/Informes.pdb | Bin 11468 -> 11468 bytes .../obj/Debug/net8.0/Informes.AssemblyInfo.cs | 2 +- .../net8.0/Informes.AssemblyInfoInputs.cache | 2 +- .../Informes.csproj.AssemblyReference.cache | Bin 709 -> 709 bytes Informes/obj/Debug/net8.0/Informes.dll | Bin 8704 -> 8704 bytes Informes/obj/Debug/net8.0/Informes.pdb | Bin 11468 -> 11468 bytes Informes/obj/Debug/net8.0/ref/Informes.dll | Bin 5120 -> 5120 bytes Informes/obj/Debug/net8.0/refint/Informes.dll | Bin 5120 -> 5120 bytes Modelo/Context.cs | 142 +- ...0240826212726_nuevasrelaciones.Designer.cs | 591 +++++++ .../20240826212726_nuevasrelaciones.cs | 443 ++++++ ...3_fixrelacionproductocategoria.Designer.cs | 591 +++++++ ...0826213353_fixrelacionproductocategoria.cs | 22 + ...0826222040_cambiadapkcompuesta.Designer.cs | 591 +++++++ .../20240826222040_cambiadapkcompuesta.cs | 54 + ...827025739_CuitNotGenerateValue.Designer.cs | 585 +++++++ .../20240827025739_CuitNotGenerateValue.cs | 163 ++ Modelo/Migrations/ContextModelSnapshot.cs | 558 ++++++- Modelo/Repositorio.cs | 8 +- Modelo/RepositorioCategoria.cs | 3 +- Modelo/RepositorioClientes.cs | 5 +- ...a.Designer.cs => FrmCategoria.Designer.cs} | 6 +- Vista/{AddCategoria.cs => FrmCategoria.cs} | 18 +- .../{AddCategoria.resx => FrmCategoria.resx} | 6 +- Vista/FrmCategorias.Designer.cs | 78 + Vista/FrmCategorias.cs | 34 + Vista/FrmCategorias.resx | 120 ++ Vista/FrmOrdenDeCompra.cs | 1 - Vista/FrmProducto.Designer.cs | 135 +- Vista/FrmProducto.cs | 49 +- Vista/FrmProducto.resx | 4 +- Vista/FrmProductos.Designer.cs | 204 ++- Vista/FrmProductos.cs | 116 +- Vista/FrmProductos.resx | 6 +- Vista/PantallaPrincipal.Designer.cs | 25 +- Vista/PantallaPrincipal.cs | 11 + Vista/PantallaPrincipal.resx | 6 +- Vista/Program.cs | 83 - Vista/Vista.csproj | 7 + Vista/Vista.csproj.user | 5 +- Vista/obj/Vista.csproj.nuget.dgspec.json | 8 + Vista/obj/Vista.csproj.nuget.g.props | 2 + Vista/obj/Vista.csproj.nuget.g.targets | 1 + Vista/obj/project.assets.json | 1417 ++++++++++++++++- Vista/obj/project.nuget.cache | 28 +- testing/bin/Debug/net8.0/Entidades.dll | Bin 16896 -> 17408 bytes testing/bin/Debug/net8.0/Entidades.pdb | Bin 17360 -> 17468 bytes testing/bin/Debug/net8.0/Modelo.dll | Bin 22016 -> 118272 bytes testing/bin/Debug/net8.0/Modelo.pdb | Bin 19644 -> 31708 bytes testing/bin/Debug/net8.0/testing.dll | Bin 5120 -> 5120 bytes testing/bin/Debug/net8.0/testing.pdb | Bin 13840 -> 13840 bytes testing/obj/Debug/net8.0/ref/testing.dll | Bin 5632 -> 5632 bytes testing/obj/Debug/net8.0/refint/testing.dll | Bin 5632 -> 5632 bytes .../obj/Debug/net8.0/testing.AssemblyInfo.cs | 2 +- .../net8.0/testing.AssemblyInfoInputs.cache | 2 +- .../testing.csproj.AssemblyReference.cache | Bin 29872 -> 30060 bytes testing/obj/Debug/net8.0/testing.dll | Bin 5120 -> 5120 bytes testing/obj/Debug/net8.0/testing.pdb | Bin 13840 -> 13840 bytes 76 files changed, 5786 insertions(+), 496 deletions(-) create mode 100644 Modelo/Migrations/20240826212726_nuevasrelaciones.Designer.cs create mode 100644 Modelo/Migrations/20240826212726_nuevasrelaciones.cs create mode 100644 Modelo/Migrations/20240826213353_fixrelacionproductocategoria.Designer.cs create mode 100644 Modelo/Migrations/20240826213353_fixrelacionproductocategoria.cs create mode 100644 Modelo/Migrations/20240826222040_cambiadapkcompuesta.Designer.cs create mode 100644 Modelo/Migrations/20240826222040_cambiadapkcompuesta.cs create mode 100644 Modelo/Migrations/20240827025739_CuitNotGenerateValue.Designer.cs create mode 100644 Modelo/Migrations/20240827025739_CuitNotGenerateValue.cs rename Vista/{AddCategoria.Designer.cs => FrmCategoria.Designer.cs} (97%) rename Vista/{AddCategoria.cs => FrmCategoria.cs} (80%) rename Vista/{AddCategoria.resx => FrmCategoria.resx} (99%) create mode 100644 Vista/FrmCategorias.Designer.cs create mode 100644 Vista/FrmCategorias.cs create mode 100644 Vista/FrmCategorias.resx diff --git a/.vs/Final_OOP/v17/.suo b/.vs/Final_OOP/v17/.suo index 50e89fb34cea915fe13de8af5b1651be1ee1ac3f..62636ab791580e6d4f56c3990171616b5cdea6c2 100644 GIT binary patch literal 207360 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 diff --git a/Controladora/ControladoraCategorias.cs b/Controladora/ControladoraCategorias.cs index a9f112b..2db1614 100644 --- a/Controladora/ControladoraCategorias.cs +++ b/Controladora/ControladoraCategorias.cs @@ -12,22 +12,11 @@ namespace Controladora { repositorioCategoria = new(new Context()); } - // Método para verificar si una categoría con un ID ya existe - private bool CategoriaExiste(int id) - { - var cat = repositorioCategoria.ObtenerPorId(id); - return (cat.Id == id); - } public string Añadir(Categoria t) { if (t == null) return "La categoría es nula, fallo la carga"; - if (CategoriaExiste(t.Id)) - { - return $"Ya existe una categoría con el ID {t.Id}"; - } - repositorioCategoria.Add(t); repositorioCategoria.Guardar(); return $"La categoría {t.Descripcion} se cargó correctamente"; @@ -46,11 +35,6 @@ namespace Controladora { if (t == null) return "La categoría es nula, fallo la carga"; - if (!CategoriaExiste(t.Id)) - { - return $"No se encontró una categoría con el ID {t.Id}"; - } - repositorioCategoria.Mod(t); repositorioCategoria.Guardar(); return $"La categoría {t.Descripcion} se modificó correctamente"; diff --git a/Controladora/ControladoraClientes.cs b/Controladora/ControladoraClientes.cs index f48cc88..06e2835 100644 --- a/Controladora/ControladoraClientes.cs +++ b/Controladora/ControladoraClientes.cs @@ -11,22 +11,11 @@ namespace Controladora { repositorioClientes = new(new Context()); } - private bool ClienteExiste(long cuit) - { - var cat = repositorioClientes.ObtenerPorId(cuit); - return (cat.Cuit == cuit); - } public string Añadir(Cliente t) { if (t == null) return "El Cliente es nulo, fallo la carga"; - // Verificar si el CUIT ya existe en el repositorio - if (ClienteExiste(t.Cuit)) - { - return $"El Cliente con el CUIT {t.Cuit} ya existe"; - } - try { repositorioClientes.Add(t); diff --git a/Controladora/ControladoraPresupuestos.cs b/Controladora/ControladoraPresupuestos.cs index 8c8ea0a..f6579ca 100644 --- a/Controladora/ControladoraPresupuestos.cs +++ b/Controladora/ControladoraPresupuestos.cs @@ -75,7 +75,7 @@ namespace Controladora if (proveedor.Cuit < 0) return new List().AsReadOnly(); var productos = ControladoraProductos.Instance .Listar() - .Where(x => x.ListarProveedores() + .Where(x => x.proveedores .Any(x => x.Cuit == proveedor.Cuit)) .ToList() .AsReadOnly(); diff --git a/Controladora/ControladoraProductoNoPercedero.cs b/Controladora/ControladoraProductoNoPercedero.cs index 3b89b0c..f5d6e9f 100644 --- a/Controladora/ControladoraProductoNoPercedero.cs +++ b/Controladora/ControladoraProductoNoPercedero.cs @@ -1,12 +1,55 @@ -using System; +using Entidades; +using Modelo; +using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Controladora { - public class ControladoraProductoNoPercedero + public class ControladoraProductoNoPercedero : Singleton { + RepositorioProductosNoPercedero noPercedero; + public ControladoraProductoNoPercedero() + { + noPercedero = new RepositorioProductosNoPercedero(new Context()); + } + + public string Añadir(ProductoNoPercedero t) + { + if (t == null) return "El Producto es nulo fallo la carga"; + + noPercedero.Add(t); + return (noPercedero.Guardar()) ? + $"El Producto {t.Nombre} se cargo correctamente" : + $"Fallo la carga del Producto {t.Nombre}"; + } + + public string Eliminar(ProductoNoPercedero t) + { + if (t == null) return "El Producto es nulo fallo la carga"; + + noPercedero.Del(t); + return (noPercedero.Guardar()) ? + $"El Producto {t.Nombre} se Elimino correctamente" : + $"Fallo la Eliminacion del Producto {t.Nombre}"; + } + + public string Modificar(ProductoNoPercedero t) + { + if (t == null) return "El Producto es nulo fallo la carga"; + + noPercedero.Mod(t); + return (noPercedero.Guardar()) ? + $"El Producto {t.Nombre} se Modifico correctamente" : + $"Fallo la Modificacion del Producto {t.Nombre}"; + } + + public ReadOnlyCollection Listar() + { + return noPercedero.Listar().AsReadOnly(); + } } } diff --git a/Controladora/ControladoraProductoPercedero.cs b/Controladora/ControladoraProductoPercedero.cs index 2052bd9..195ec98 100644 --- a/Controladora/ControladoraProductoPercedero.cs +++ b/Controladora/ControladoraProductoPercedero.cs @@ -1,4 +1,6 @@ -using System; +using Entidades; +using Modelo; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,7 +8,41 @@ using System.Threading.Tasks; namespace Controladora { - public class ControladoraProductoPercedero + public class ControladoraProductoPercedero : Singleton { + RepositorioProductosPercedero Percedero; + public ControladoraProductoPercedero() + { + Percedero = new RepositorioProductosPercedero(new Context()); + } + public string Añadir(ProductoPercedero t) + { + if (t == null) return "El Producto es nulo fallo la carga"; + + Percedero.Add(t); + return (Percedero.Guardar()) ? + $"El Producto {t.Nombre} se cargo correctamente" : + $"Fallo la carga del Producto {t.Nombre}"; + } + + public string Eliminar(ProductoPercedero t) + { + if (t == null) return "El Producto es nulo fallo la carga"; + + Percedero.Del(t); + return (Percedero.Guardar()) ? + $"El Producto {t.Nombre} se Elimino correctamente" : + $"Fallo la eliminacion del Producto {t.Nombre}"; + } + + public string Modificar(ProductoPercedero t) + { + if (t == null) return "El Producto es nulo fallo la carga"; + + Percedero.Mod(t); + return (Percedero.Guardar()) ? + $"El Producto {t.Nombre} se Modifico correctamente" : + $"Fallo la Modificacion del Producto {t.Nombre}"; + } } } diff --git a/Controladora/ControladoraProductos.cs b/Controladora/ControladoraProductos.cs index a6a2883..839e453 100644 --- a/Controladora/ControladoraProductos.cs +++ b/Controladora/ControladoraProductos.cs @@ -18,7 +18,7 @@ namespace Controladora { Producto productoalistar = new RepositorioProductos(new Context()).Listar().First(x => x.Id == producto.Id); if (productoalistar == null) return new ReadOnlyCollection(new List()); - return productoalistar.ListarProveedores(); + return productoalistar.proveedores.AsReadOnly(); } diff --git a/Entidades/Categoria.cs b/Entidades/Categoria.cs index 8a6bd26..ef6f258 100644 --- a/Entidades/Categoria.cs +++ b/Entidades/Categoria.cs @@ -1,9 +1,12 @@  +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + namespace Entidades { public class Categoria { - public int Id { get; set; } + public Int32 Id { get; set; } public string Descripcion { get; set; } } } diff --git a/Entidades/Detalle.cs b/Entidades/Detalle.cs index 640d6b4..cafef6f 100644 --- a/Entidades/Detalle.cs +++ b/Entidades/Detalle.cs @@ -9,7 +9,7 @@ namespace Entidades public int Cantidad { get; set; } public T Producto { get; set; } - public int IdProducto { get; set; } + } } \ No newline at end of file diff --git a/Entidades/DetalleOrdenDeCompra.cs b/Entidades/DetalleOrdenDeCompra.cs index a9dc9e7..2320f04 100644 --- a/Entidades/DetalleOrdenDeCompra.cs +++ b/Entidades/DetalleOrdenDeCompra.cs @@ -8,7 +8,6 @@ namespace Entidades public int IdOrdenDeCompra { get; set; } public double MontoCU { get; set; } public int IdPresupuesto { get; set; } - public Presupuesto presupuesto { get; set; } [NotMapped] public string NombreProducto diff --git a/Entidades/Factura.cs b/Entidades/Factura.cs index c19b8ea..edb2789 100644 --- a/Entidades/Factura.cs +++ b/Entidades/Factura.cs @@ -11,7 +11,8 @@ namespace Entidades public long IdCliente { get; set; } public Cliente Cliente { get; set; } - public List detalles = new List(); + private List detalles = new List(); + public ReadOnlyCollection Detalles => detalles.AsReadOnly(); public void AñadirDetalle(DetalleFactura detalle) diff --git a/Entidades/OrdenDeCompra.cs b/Entidades/OrdenDeCompra.cs index 35c1763..0748ff7 100644 --- a/Entidades/OrdenDeCompra.cs +++ b/Entidades/OrdenDeCompra.cs @@ -11,8 +11,8 @@ namespace Entidades public long IdProveedor { get; set; } public bool Entregado { get; set; } - public List detalles = new List(); - + private List detalles = new List(); + public ReadOnlyCollection Detalles => detalles.AsReadOnly(); public void AñadirDetalle(DetalleOrdenDeCompra detalle) { detalles.Add(detalle); diff --git a/Entidades/Presupuesto.cs b/Entidades/Presupuesto.cs index 5772576..8e05391 100644 --- a/Entidades/Presupuesto.cs +++ b/Entidades/Presupuesto.cs @@ -22,7 +22,7 @@ } public List detalles = new List(); - + public void AñadirDetalle(DetallePresupuesto det) { detalles.Add(det); } diff --git a/Entidades/Producto.cs b/Entidades/Producto.cs index 047186a..174bb31 100644 --- a/Entidades/Producto.cs +++ b/Entidades/Producto.cs @@ -12,7 +12,7 @@ namespace Entidades public bool Habilitado { get; set; } public bool EsPerecedero { get; set; } - private List proveedores = new List(); + public List proveedores = new List(); public void AñadirProveedor(Proveedor proveedor) { @@ -25,10 +25,6 @@ namespace Entidades if (pAEliminar == null) return false; return proveedores.Remove(pAEliminar); } - public ReadOnlyCollection ListarProveedores() - { - return proveedores.AsReadOnly(); - } public List categorias = new List(); @@ -42,8 +38,5 @@ namespace Entidades return categorias.Remove(cAEliminar); } - public ReadOnlyCollection MostrarCategorias(){ - return categorias.AsReadOnly(); - } } } diff --git a/Entidades/Remito.cs b/Entidades/Remito.cs index 2f008b5..9b799d6 100644 --- a/Entidades/Remito.cs +++ b/Entidades/Remito.cs @@ -6,10 +6,12 @@ public class Remito { public int Id { get; set; } - public List lotesDeProductosEntregados = new List(); + public Proveedor Proveedor { get; set; } public int IdProveedor { get; set; } + private List lotesDeProductosEntregados = new List(); + public ReadOnlyCollection Lotes => lotesDeProductosEntregados.AsReadOnly(); public ReadOnlyCollection MostrarLotes() { return lotesDeProductosEntregados.AsReadOnly(); diff --git a/Informes/bin/Debug/net8.0/Entidades.dll b/Informes/bin/Debug/net8.0/Entidades.dll index 8bb704768a2cfa9de7bb08e294fe6347496a7324..66a1039183f28a78e5b303ff487b261ea991409b 100644 GIT binary patch literal 17408 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 A+5i9m literal 17920 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 z%0AedvU9nmOWAu2yJ9?c$*S?#rNXwQl6}dvoo%)A&b~}GX>*at+2vyns*!R=vD>qm z1CEo(WHsO3mLBMHvUYFE=~+T13AF85Cy|UJXXrZ|JJFF&9c;}YyLdjCNrT*y%;oX5 zaUdPeuyT!iIiSM_?sx`OTh2~Jpv!AdN z$zuDc^I$IT^fk0*`ua0zC!I%uPO2eh=j|5$&8y8-%QbYy_d9*Il+m8($R?b0%;6+i zUD{~QwE1jDZa{ltqaDu=6q32fByb^mvRE-UK)HrZPTI*PiC7&3G=f|=?i_0=O;Hg${6JYSCAzOe{v_iLB7-60Y>R75}q{nA1D3Z=aLhkj-3^sxHa0W;>3mVC}-H;cfQ49ZWj*p|s}wfp;>L`xpOcj_Gg z#j|@dB- ztp7$-XqS`CVV)UlG=rDdD?9a$UI^CS{rZWhqJfS-s|KK?!aoBEAl!D;=IF2 z+1KjjuxNK%VlMfj!HoyX<3Eom8r&3|vziB!r|n>q*jizB`b%v7FUu&2%NoU`$TQm@}huV zrB*we$Jcgj4D-o&M#?EHG?G&hwWU+o>Lj#Namf*{63EqY7ag$`fLP3;qb)9Ai(Yhu zH!8Dw$r0A5da>vELf5ur?Gd-q#R&UIz4mO&V1?2PRDmlpx*+XoiZXyL#Z^jdC6KLp zQgh3ZDrqX_q{d-+%%+^Yu6uhzuW=?{131^>lvJ|DiQD)VNuzgfC{(X#+I=+Xwy3c1 z6&h7!%-mnHI!e1r7DP!@ip@yhl1#r>eBJd?=WZ5D-C^$fC?*;FyjqG4b=Pa4*ow%l zbg8vu#gw##jxag6>sm1vGnW^M{z7pL*q>ynAueBAGr4@WOI;-!rn9A4Nk`|$OjBU6wGcaF?jnZ-tWV)LkSUXPlO^VnmGCfpXWvS4l$bdBi32pq+DO47)BGYy9C?~%>5>-mO zM^yyw>{;|z><>qsZxl`8x}pU!PP``)a}&qJ6Rh@(X|EuA^+fQ)NnJ!xyufO&f>N*D z>-|rx?>lpE;2|Tz8TN`_SmE~`-hlFkJl;r?$6GxI=Wgg#KAleu z^qA47oA0RkcKM*e_3&l??c6mIG=S+iqd0@;vapY%zSRo*(PyH7R6Gh4lmIIMDClBK z`Z?0Xof~OFmsjs*wR$(yNR_Z!a`&r3cSdU19uvEk)5SjBba#XydO^sjOKKQ%p-vbS zpP)+yxejwUb@d#VtC!5`5l|k~AvCoPO{~*RgsyPFvprgS zU{wSD+OI1-v9QB5Pms1@!|CS~QFw$cswiw*@SqC6fRzbOey{FZfMIW5c1f2ZCsT*OtvBbt6@+Tgwm}5t0tn=cI z#7~~B|H!t7YHq*e&>r6|&ZG6BJv(#QRqxsBB>FRZa+v{aD)wZZ{!DHU?yKxncg)W1 zDa2$?ruV8n5|TY>Cy$5~O%45tUh3T3vUK?hG9~?DjwuPPsay5skDht;XWvZD8%nqQ zD{AZ>zhXV=qO-rVCa)K)v0roLPpJ?zNVQd{4ii(E!G`|RxgivB_(z`w1Q zzq1)UyTNkN;cW-QQm}8;`f4wGeA-W;k@SdU*Z!kLW2BRC_+wdll z|6+sa>9SwGrJt+wRmF$?#$SNR!K;m2>IU;y45x)$ZM<#Rh^O@_yoG3|G~QKY#A^<5 zsxDY1Tnzd%K-RR;cb42pun?^lSB{dvdMg!`Z!iRrC%5VI(ARWK+Nl7dF(LR2!vkz~8^6-h` zj7b?ChEJj__IBIHNJrybW$8F>M;;lJKY;g2`I1@^M$OnbzE9rBotZG5kW+!Ts}p^w_Td&xkVqW4gZ{e{m7`A2+kUSO5S3 diff --git a/Informes/bin/Debug/net8.0/Entidades.pdb b/Informes/bin/Debug/net8.0/Entidades.pdb index 209e4107aff58eadd3f8f521685668434d5c4d37..b28042f98dd1bbfb82c3bfceac109fc808708c8c 100644 GIT binary patch delta 3712 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 F1OPH`OH=>= delta 235 zcmZp0X>gg)!Qx_Wy=G%ih?qd=Ri4}PetG-PDBpLP>%VsV<_}^&7&T1I%#zYlP0f=H z3``P}&COFyk}XY)jgyj6j0{p!4Gj_v6AdgAP0c3@Nb0a0D+xI>*+DWuV6NJCtBEsN zoI34z_jGVfH=DdbGC~0=Xv7H>1gX}IntQZUGwSaVVQ;3*5>h8v{7o6mfG~+6jUko6 zl);=KnZW=EO&Ah^EOQ`C1+tSFEPW_|gK FOaK^SMA`rV diff --git a/Informes/bin/Debug/net8.0/Informes.pdb b/Informes/bin/Debug/net8.0/Informes.pdb index a2b36157005107c10dae3353fdf4fdc4be0df907..57f102fe1e9f3c7060e62557942ebe200e9ef6b3 100644 GIT binary patch delta 99 zcmV-p0G$8KSyY_!v;c9HvNjmi?&djVHsTtyR|Gc#7_4IUKjfp8t06L}yOaK4? delta 17 YcmX@gdX#lSG~0YzK9-b28xvEQ065nM5&!@I diff --git a/Informes/obj/Debug/net8.0/Informes.dll b/Informes/obj/Debug/net8.0/Informes.dll index 6b106986884d9d46b43cc5f4f7d691addd480b57..284ba5e62e02892d2d69543f851f8102ca25677d 100644 GIT binary patch delta 235 zcmZp0X>gg)!E*5T!EGCRLc|0XPCj*M*XKN+^~d+z;%m9!zxjjM4@M0$a|1(5gJctv zBr`Kh0|UzxqZA91RKqk26H7xw^ORJB6hjMB3$wJz0+Ko`w?wbcoa`VOAh1l$LGu2w z9Pj;ha(^yQ@35Y{Kr%uBD#%?A6$Gia-#UM@@$YLj!4ErkZI+Na!QyYmV9sE`V8~zz zB$F9TfG~-{3PrEN830K`pr|Pjn=zzq)|bD? F1OPH`OH=>= delta 235 zcmZp0X>gg)!Qx_Wy=G%ih?qd=Ri4}PetG-PDBpLP>%VsV<_}^&7&T1I%#zYlP0f=H z3``P}&COFyk}XY)jgyj6j0{p!4Gj_v6AdgAP0c3@Nb0a0D+xI>*+DWuV6NJCtBEsN zoI34z_jGVfH=DdbGC~0=Xv7H>1gX}IntQZUGwSaVVQ;3*5>h8v{7o6mfG~+6jUko6 zl);=KnZW=EO&Ah^EOQ`C1+tSFEPW_|gK FOaK^SMA`rV diff --git a/Informes/obj/Debug/net8.0/Informes.pdb b/Informes/obj/Debug/net8.0/Informes.pdb index a2b36157005107c10dae3353fdf4fdc4be0df907..57f102fe1e9f3c7060e62557942ebe200e9ef6b3 100644 GIT binary patch delta 99 zcmV-p0G$8KSyY_!v;c9HvNjmi?&djVHsTtyR|Gc#7_4IU0Ec8VH2?qr diff --git a/Informes/obj/Debug/net8.0/refint/Informes.dll b/Informes/obj/Debug/net8.0/refint/Informes.dll index ca549f843c369ae80b3a71e6567d61f1cafe274a..cf8b199fdf715460f04ade44defb5ee7e1d25fa8 100644 GIT binary patch delta 194 zcmZqBXwaC@!LlZ4_SB6%CCmbkllF1PD%$(*Px4pz^)d19W0Ec8VH2?qr diff --git a/Modelo/Context.cs b/Modelo/Context.cs index 791c9a5..1b7aad6 100644 --- a/Modelo/Context.cs +++ b/Modelo/Context.cs @@ -32,60 +32,168 @@ public class Context : Microsoft.EntityFrameworkCore.DbContext modelBuilder.Entity() .ToTable("Categoria") .HasKey(x => x.Id); + modelBuilder.Entity() - .Property(c=>c.Descripcion) + .Property(c => c.Descripcion) .IsRequired() - .HasMaxLength(100); + .HasMaxLength(50); /// Cliente modelBuilder.Entity() .ToTable("Clientes") // Nombre de la tabla .HasKey(c => c.Cuit); // Configura la clave primaria + + modelBuilder.Entity() + .Property(x => x.Cuit) + .ValueGeneratedNever(); + modelBuilder.Entity() .Property(c => c.Nombre) .IsRequired() - .HasMaxLength(100); + .HasMaxLength(30); modelBuilder.Entity() .Property(c => c.Apellido) .IsRequired() - .HasMaxLength(100); + .HasMaxLength(30); modelBuilder.Entity() .Property(c => c.Direccion) - .HasMaxLength(200); + .IsRequired() + .HasMaxLength(50); modelBuilder.Entity() .Property(c => c.Correo) + .IsRequired() .HasMaxLength(150); - + modelBuilder.Entity() .Property(c => c.Habilitado) + .IsRequired() .HasDefaultValue(true); - - /// Factura Y DetalleFactura WIP + + /// Factura Y DetalleFactura modelBuilder.Entity() .ToTable("Facturas") .HasKey(f => f.Id); - + modelBuilder.Entity() - .HasMany(f => f.detalles) + .HasMany(f => f.Detalles) .WithOne() .HasForeignKey(df => df.IdFactura); - + modelBuilder.Entity() .ToTable("DetallesFacturas") - .HasKey(df => df.Id); - + .HasKey(df => new { df.Id, df.IdFactura }); + + modelBuilder.Entity() .Property(df => df.IdFactura) .IsRequired(); + + + //Producto + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id); + + entity.Property(e => e.Nombre) + .IsRequired() + .HasMaxLength(30); + + entity.Property(e => e.Precio) + .HasColumnType("float"); + + entity.Property(e => e.Habilitado) + .IsRequired() + .HasDefaultValue(true); + + entity.Property(e => e.EsPerecedero) + .IsRequired(); + + entity.HasMany(e => e.proveedores) + .WithMany() + .UsingEntity>( + "ProductoProveedor", + j => j.HasOne().WithMany().HasForeignKey("ProveedorId"), + j => j.HasOne().WithMany().HasForeignKey("ProductoId"), + j => j.HasKey("ProveedorId", "ProductoId")); + + + entity.HasMany(e => e.categorias) + .WithMany() + .UsingEntity>( + "ProductoCategoria", + j => j.HasOne().WithMany().HasForeignKey("CategoriaId"), + j => j.HasOne().WithMany().HasForeignKey("ProductoId"), + j => j.HasKey("CategoriaId", "ProductoId")); + }); + + // Mapeo para ProductoNoPercedero + modelBuilder.Entity(entity => + { + entity.Property(e => e.TipoDeEnvase) + .HasConversion(); + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(x => x.Cuit); + + entity.Property(x => x.Cuit).ValueGeneratedNever(); + + entity.Property(x => x.Nombre) + .IsRequired() + .HasMaxLength(30); + + entity.Property(x => x.Habilitado) + .IsRequired() + .HasDefaultValue(true); + + entity.Property(x => x.RazonSocial) + .IsRequired() + .HasMaxLength(60); + + entity.Property(x => x.Direccion) + .IsRequired() + .HasMaxLength(60); + }); + + modelBuilder.Entity() + .HasKey(df => new { df.Id, df.IdOrdenDeCompra }); + + modelBuilder.Entity() + .HasKey(x => x.Id); + + modelBuilder.Entity() + .HasMany(x => x.Detalles) + .WithOne() + .HasForeignKey(x => x.IdOrdenDeCompra); + + modelBuilder.Entity() + .HasKey(df => new { df.Id, df.IdPresupuesto }); + + modelBuilder.Entity() + .HasKey(x => x.Id); + + modelBuilder.Entity() + .HasMany(x => x.detalles) + .WithOne() + .HasForeignKey(x => x.IdPresupuesto); + + modelBuilder.Entity() + .HasKey(df => new { df.Id, df.IdRemito }); + + modelBuilder.Entity() + .HasKey(x => x.Id); + + modelBuilder.Entity() + .HasMany(x => x.Lotes) + .WithOne() + .HasForeignKey(x => x.IdRemito); + - modelBuilder.Entity() - .HasOne(df => df.Producto) - .WithMany() - .HasForeignKey(df => df.Producto.Id); } } diff --git a/Modelo/Migrations/20240826212726_nuevasrelaciones.Designer.cs b/Modelo/Migrations/20240826212726_nuevasrelaciones.Designer.cs new file mode 100644 index 0000000..b55a205 --- /dev/null +++ b/Modelo/Migrations/20240826212726_nuevasrelaciones.Designer.cs @@ -0,0 +1,591 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Modelo; + +#nullable disable + +namespace Modelo.Migrations +{ + [DbContext(typeof(Context))] + [Migration("20240826212726_nuevasrelaciones")] + partial class nuevasrelaciones + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Entidades.Categoria", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Descripcion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("Categoria", (string)null); + }); + + modelBuilder.Entity("Entidades.Cliente", b => + { + b.Property("Cuit") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Cuit")); + + b.Property("Apellido") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Correo") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.HasKey("Cuit"); + + b.ToTable("Clientes", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdFactura") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.HasKey("Id", "IdFactura"); + + b.HasIndex("IdFactura"); + + b.HasIndex("IdProducto"); + + b.ToTable("DetallesFacturas", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdOrdenDeCompra") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCU") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdOrdenDeCompra"); + + b.HasIndex("IdOrdenDeCompra"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetalleOrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCUPropuesto") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdPresupuesto"); + + b.HasIndex("IdPresupuesto"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetallePresupuestos"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClienteCuit") + .HasColumnType("bigint"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("IdCliente") + .HasColumnType("bigint"); + + b.Property("Total") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ClienteCuit"); + + b.ToTable("Facturas", (string)null); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdRemito") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdRemito"); + + b.HasIndex("IdRemito"); + + b.HasIndex("ProductoId"); + + b.ToTable("Lotes"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Entregado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("OrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Aceptado") + .HasColumnType("bit"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Presupuestos"); + }); + + modelBuilder.Entity("Entidades.Producto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(21) + .HasColumnType("nvarchar(21)"); + + b.Property("EsPerecedero") + .HasColumnType("bit"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Precio") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Producto"); + + b.HasDiscriminator().HasValue("Producto"); + + b.UseTphMappingStrategy(); + }); + + modelBuilder.Entity("Entidades.Proveedor", b => + { + b.Property("Cuit") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Cuit")); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("RazonSocial") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("Cuit"); + + b.ToTable("Proveedores"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdProveedor") + .HasColumnType("int"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Remitos"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.Property("CategoriaId") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("CategoriaId", "ProductoId"); + + b.HasIndex("ProductoId"); + + b.ToTable("ProductoCategoria"); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.Property("ProductoId") + .HasColumnType("int"); + + b.Property("ProveedorId") + .HasColumnType("bigint"); + + b.HasKey("ProductoId", "ProveedorId"); + + b.HasIndex("ProveedorId"); + + b.ToTable("ProductoProveedor"); + }); + + modelBuilder.Entity("Entidades.ProductoNoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("TipoDeEnvase") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ProductoNoPercedero"); + }); + + modelBuilder.Entity("Entidades.ProductoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("MesesHastaConsumoPreferente") + .HasColumnType("int"); + + b.Property("MesesHastaVencimiento") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("ProductoPercedero"); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.HasOne("Entidades.Factura", null) + .WithMany("Detalles") + .HasForeignKey("IdFactura") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("IdProducto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.HasOne("Entidades.OrdenDeCompra", null) + .WithMany("Detalles") + .HasForeignKey("IdOrdenDeCompra") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.HasOne("Entidades.Presupuesto", null) + .WithMany("Detalles") + .HasForeignKey("IdPresupuesto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.HasOne("Entidades.Cliente", "Cliente") + .WithMany() + .HasForeignKey("ClienteCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cliente"); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.HasOne("Entidades.Remito", null) + .WithMany("Lotes") + .HasForeignKey("IdRemito") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.HasOne("Entidades.Categoria", null) + .WithMany() + .HasForeignKey("CategoriaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Proveedor", null) + .WithMany() + .HasForeignKey("ProveedorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Navigation("Lotes"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modelo/Migrations/20240826212726_nuevasrelaciones.cs b/Modelo/Migrations/20240826212726_nuevasrelaciones.cs new file mode 100644 index 0000000..aeb35cd --- /dev/null +++ b/Modelo/Migrations/20240826212726_nuevasrelaciones.cs @@ -0,0 +1,443 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Modelo.Migrations +{ + /// + public partial class nuevasrelaciones : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Categoria", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Descripcion = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Categoria", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Clientes", + columns: table => new + { + Cuit = table.Column(type: "bigint", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Nombre = table.Column(type: "nvarchar(30)", maxLength: 30, nullable: false), + Apellido = table.Column(type: "nvarchar(30)", maxLength: 30, nullable: false), + Direccion = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Correo = table.Column(type: "nvarchar(150)", maxLength: 150, nullable: false), + Habilitado = table.Column(type: "bit", nullable: false, defaultValue: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Clientes", x => x.Cuit); + }); + + migrationBuilder.CreateTable( + name: "Producto", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Nombre = table.Column(type: "nvarchar(30)", maxLength: 30, nullable: false), + Precio = table.Column(type: "float", nullable: false), + Habilitado = table.Column(type: "bit", nullable: false, defaultValue: true), + EsPerecedero = table.Column(type: "bit", nullable: false), + Discriminator = table.Column(type: "nvarchar(21)", maxLength: 21, nullable: false), + TipoDeEnvase = table.Column(type: "nvarchar(max)", nullable: true), + MesesHastaConsumoPreferente = table.Column(type: "int", nullable: true), + MesesHastaVencimiento = table.Column(type: "int", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Producto", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Proveedores", + columns: table => new + { + Cuit = table.Column(type: "bigint", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Nombre = table.Column(type: "nvarchar(30)", maxLength: 30, nullable: false), + RazonSocial = table.Column(type: "nvarchar(60)", maxLength: 60, nullable: false), + Direccion = table.Column(type: "nvarchar(60)", maxLength: 60, nullable: false), + Habilitado = table.Column(type: "bit", nullable: false, defaultValue: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Proveedores", x => x.Cuit); + }); + + migrationBuilder.CreateTable( + name: "Facturas", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Total = table.Column(type: "float", nullable: false), + Fecha = table.Column(type: "datetime2", nullable: false), + IdCliente = table.Column(type: "bigint", nullable: false), + ClienteCuit = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Facturas", x => x.Id); + table.ForeignKey( + name: "FK_Facturas_Clientes_ClienteCuit", + column: x => x.ClienteCuit, + principalTable: "Clientes", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ProductoCategoria", + columns: table => new + { + CategoriaId = table.Column(type: "int", nullable: false), + ProductoId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ProductoCategoria", x => new { x.CategoriaId, x.ProductoId }); + table.ForeignKey( + name: "FK_ProductoCategoria_Categoria_CategoriaId", + column: x => x.CategoriaId, + principalTable: "Categoria", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ProductoCategoria_Producto_ProductoId", + column: x => x.ProductoId, + principalTable: "Producto", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "OrdenDeCompras", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ProveedorCuit = table.Column(type: "bigint", nullable: false), + IdProveedor = table.Column(type: "bigint", nullable: false), + Entregado = table.Column(type: "bit", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OrdenDeCompras", x => x.Id); + table.ForeignKey( + name: "FK_OrdenDeCompras_Proveedores_ProveedorCuit", + column: x => x.ProveedorCuit, + principalTable: "Proveedores", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Presupuestos", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Fecha = table.Column(type: "datetime2", nullable: false), + Habilitado = table.Column(type: "bit", nullable: false), + Aceptado = table.Column(type: "bit", nullable: false), + ProveedorCuit = table.Column(type: "bigint", nullable: false), + IdProveedor = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Presupuestos", x => x.Id); + table.ForeignKey( + name: "FK_Presupuestos_Proveedores_ProveedorCuit", + column: x => x.ProveedorCuit, + principalTable: "Proveedores", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ProductoProveedor", + columns: table => new + { + ProductoId = table.Column(type: "int", nullable: false), + ProveedorId = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ProductoProveedor", x => new { x.ProductoId, x.ProveedorId }); + table.ForeignKey( + name: "FK_ProductoProveedor_Producto_ProductoId", + column: x => x.ProductoId, + principalTable: "Producto", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ProductoProveedor_Proveedores_ProveedorId", + column: x => x.ProveedorId, + principalTable: "Proveedores", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Remitos", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ProveedorCuit = table.Column(type: "bigint", nullable: false), + IdProveedor = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Remitos", x => x.Id); + table.ForeignKey( + name: "FK_Remitos_Proveedores_ProveedorCuit", + column: x => x.ProveedorCuit, + principalTable: "Proveedores", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "DetallesFacturas", + columns: table => new + { + Id = table.Column(type: "int", nullable: false), + IdFactura = table.Column(type: "int", nullable: false), + Cantidad = table.Column(type: "int", nullable: false), + IdProducto = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_DetallesFacturas", x => new { x.Id, x.IdFactura }); + table.ForeignKey( + name: "FK_DetallesFacturas_Facturas_IdFactura", + column: x => x.IdFactura, + principalTable: "Facturas", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_DetallesFacturas_Producto_IdProducto", + column: x => x.IdProducto, + principalTable: "Producto", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "DetalleOrdenDeCompras", + columns: table => new + { + Id = table.Column(type: "int", nullable: false), + IdOrdenDeCompra = table.Column(type: "int", nullable: false), + MontoCU = table.Column(type: "float", nullable: false), + IdPresupuesto = table.Column(type: "int", nullable: false), + Cantidad = table.Column(type: "int", nullable: false), + ProductoId = table.Column(type: "int", nullable: false), + IdProducto = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_DetalleOrdenDeCompras", x => new { x.Id, x.IdOrdenDeCompra }); + table.ForeignKey( + name: "FK_DetalleOrdenDeCompras_OrdenDeCompras_IdOrdenDeCompra", + column: x => x.IdOrdenDeCompra, + principalTable: "OrdenDeCompras", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_DetalleOrdenDeCompras_Producto_ProductoId", + column: x => x.ProductoId, + principalTable: "Producto", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "DetallePresupuestos", + columns: table => new + { + Id = table.Column(type: "int", nullable: false), + IdPresupuesto = table.Column(type: "int", nullable: false), + MontoCUPropuesto = table.Column(type: "float", nullable: false), + Cantidad = table.Column(type: "int", nullable: false), + ProductoId = table.Column(type: "int", nullable: false), + IdProducto = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_DetallePresupuestos", x => new { x.Id, x.IdPresupuesto }); + table.ForeignKey( + name: "FK_DetallePresupuestos_Presupuestos_IdPresupuesto", + column: x => x.IdPresupuesto, + principalTable: "Presupuestos", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_DetallePresupuestos_Producto_ProductoId", + column: x => x.ProductoId, + principalTable: "Producto", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Lotes", + columns: table => new + { + Id = table.Column(type: "int", nullable: false), + IdRemito = table.Column(type: "int", nullable: false), + Fecha = table.Column(type: "datetime2", nullable: false), + Habilitado = table.Column(type: "bit", nullable: false), + Cantidad = table.Column(type: "int", nullable: false), + ProductoId = table.Column(type: "int", nullable: false), + IdProducto = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Lotes", x => new { x.Id, x.IdRemito }); + table.ForeignKey( + name: "FK_Lotes_Producto_ProductoId", + column: x => x.ProductoId, + principalTable: "Producto", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Lotes_Remitos_IdRemito", + column: x => x.IdRemito, + principalTable: "Remitos", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_DetalleOrdenDeCompras_IdOrdenDeCompra", + table: "DetalleOrdenDeCompras", + column: "IdOrdenDeCompra"); + + migrationBuilder.CreateIndex( + name: "IX_DetalleOrdenDeCompras_ProductoId", + table: "DetalleOrdenDeCompras", + column: "ProductoId"); + + migrationBuilder.CreateIndex( + name: "IX_DetallePresupuestos_IdPresupuesto", + table: "DetallePresupuestos", + column: "IdPresupuesto"); + + migrationBuilder.CreateIndex( + name: "IX_DetallePresupuestos_ProductoId", + table: "DetallePresupuestos", + column: "ProductoId"); + + migrationBuilder.CreateIndex( + name: "IX_DetallesFacturas_IdFactura", + table: "DetallesFacturas", + column: "IdFactura"); + + migrationBuilder.CreateIndex( + name: "IX_DetallesFacturas_IdProducto", + table: "DetallesFacturas", + column: "IdProducto"); + + migrationBuilder.CreateIndex( + name: "IX_Facturas_ClienteCuit", + table: "Facturas", + column: "ClienteCuit"); + + migrationBuilder.CreateIndex( + name: "IX_Lotes_IdRemito", + table: "Lotes", + column: "IdRemito"); + + migrationBuilder.CreateIndex( + name: "IX_Lotes_ProductoId", + table: "Lotes", + column: "ProductoId"); + + migrationBuilder.CreateIndex( + name: "IX_OrdenDeCompras_ProveedorCuit", + table: "OrdenDeCompras", + column: "ProveedorCuit"); + + migrationBuilder.CreateIndex( + name: "IX_Presupuestos_ProveedorCuit", + table: "Presupuestos", + column: "ProveedorCuit"); + + migrationBuilder.CreateIndex( + name: "IX_ProductoCategoria_ProductoId", + table: "ProductoCategoria", + column: "ProductoId"); + + migrationBuilder.CreateIndex( + name: "IX_ProductoProveedor_ProveedorId", + table: "ProductoProveedor", + column: "ProveedorId"); + + migrationBuilder.CreateIndex( + name: "IX_Remitos_ProveedorCuit", + table: "Remitos", + column: "ProveedorCuit"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "DetalleOrdenDeCompras"); + + migrationBuilder.DropTable( + name: "DetallePresupuestos"); + + migrationBuilder.DropTable( + name: "DetallesFacturas"); + + migrationBuilder.DropTable( + name: "Lotes"); + + migrationBuilder.DropTable( + name: "ProductoCategoria"); + + migrationBuilder.DropTable( + name: "ProductoProveedor"); + + migrationBuilder.DropTable( + name: "OrdenDeCompras"); + + migrationBuilder.DropTable( + name: "Presupuestos"); + + migrationBuilder.DropTable( + name: "Facturas"); + + migrationBuilder.DropTable( + name: "Remitos"); + + migrationBuilder.DropTable( + name: "Categoria"); + + migrationBuilder.DropTable( + name: "Producto"); + + migrationBuilder.DropTable( + name: "Clientes"); + + migrationBuilder.DropTable( + name: "Proveedores"); + } + } +} diff --git a/Modelo/Migrations/20240826213353_fixrelacionproductocategoria.Designer.cs b/Modelo/Migrations/20240826213353_fixrelacionproductocategoria.Designer.cs new file mode 100644 index 0000000..0373f40 --- /dev/null +++ b/Modelo/Migrations/20240826213353_fixrelacionproductocategoria.Designer.cs @@ -0,0 +1,591 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Modelo; + +#nullable disable + +namespace Modelo.Migrations +{ + [DbContext(typeof(Context))] + [Migration("20240826213353_fixrelacionproductocategoria")] + partial class fixrelacionproductocategoria + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Entidades.Categoria", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Descripcion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("Categoria", (string)null); + }); + + modelBuilder.Entity("Entidades.Cliente", b => + { + b.Property("Cuit") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Cuit")); + + b.Property("Apellido") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Correo") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.HasKey("Cuit"); + + b.ToTable("Clientes", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdFactura") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.HasKey("Id", "IdFactura"); + + b.HasIndex("IdFactura"); + + b.HasIndex("IdProducto"); + + b.ToTable("DetallesFacturas", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdOrdenDeCompra") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCU") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdOrdenDeCompra"); + + b.HasIndex("IdOrdenDeCompra"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetalleOrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCUPropuesto") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdPresupuesto"); + + b.HasIndex("IdPresupuesto"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetallePresupuestos"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClienteCuit") + .HasColumnType("bigint"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("IdCliente") + .HasColumnType("bigint"); + + b.Property("Total") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ClienteCuit"); + + b.ToTable("Facturas", (string)null); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdRemito") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdRemito"); + + b.HasIndex("IdRemito"); + + b.HasIndex("ProductoId"); + + b.ToTable("Lotes"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Entregado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("OrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Aceptado") + .HasColumnType("bit"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Presupuestos"); + }); + + modelBuilder.Entity("Entidades.Producto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(21) + .HasColumnType("nvarchar(21)"); + + b.Property("EsPerecedero") + .HasColumnType("bit"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Precio") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Producto"); + + b.HasDiscriminator().HasValue("Producto"); + + b.UseTphMappingStrategy(); + }); + + modelBuilder.Entity("Entidades.Proveedor", b => + { + b.Property("Cuit") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Cuit")); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("RazonSocial") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("Cuit"); + + b.ToTable("Proveedores"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdProveedor") + .HasColumnType("int"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Remitos"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.Property("CategoriaId") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("CategoriaId", "ProductoId"); + + b.HasIndex("ProductoId"); + + b.ToTable("ProductoCategoria"); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.Property("ProductoId") + .HasColumnType("int"); + + b.Property("ProveedorId") + .HasColumnType("bigint"); + + b.HasKey("ProductoId", "ProveedorId"); + + b.HasIndex("ProveedorId"); + + b.ToTable("ProductoProveedor"); + }); + + modelBuilder.Entity("Entidades.ProductoNoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("TipoDeEnvase") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ProductoNoPercedero"); + }); + + modelBuilder.Entity("Entidades.ProductoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("MesesHastaConsumoPreferente") + .HasColumnType("int"); + + b.Property("MesesHastaVencimiento") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("ProductoPercedero"); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.HasOne("Entidades.Factura", null) + .WithMany("Detalles") + .HasForeignKey("IdFactura") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("IdProducto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.HasOne("Entidades.OrdenDeCompra", null) + .WithMany("Detalles") + .HasForeignKey("IdOrdenDeCompra") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.HasOne("Entidades.Presupuesto", null) + .WithMany("Detalles") + .HasForeignKey("IdPresupuesto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.HasOne("Entidades.Cliente", "Cliente") + .WithMany() + .HasForeignKey("ClienteCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cliente"); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.HasOne("Entidades.Remito", null) + .WithMany("Lotes") + .HasForeignKey("IdRemito") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.HasOne("Entidades.Categoria", null) + .WithMany() + .HasForeignKey("CategoriaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Proveedor", null) + .WithMany() + .HasForeignKey("ProveedorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Navigation("Lotes"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modelo/Migrations/20240826213353_fixrelacionproductocategoria.cs b/Modelo/Migrations/20240826213353_fixrelacionproductocategoria.cs new file mode 100644 index 0000000..f4b64de --- /dev/null +++ b/Modelo/Migrations/20240826213353_fixrelacionproductocategoria.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Modelo.Migrations +{ + /// + public partial class fixrelacionproductocategoria : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/Modelo/Migrations/20240826222040_cambiadapkcompuesta.Designer.cs b/Modelo/Migrations/20240826222040_cambiadapkcompuesta.Designer.cs new file mode 100644 index 0000000..5843692 --- /dev/null +++ b/Modelo/Migrations/20240826222040_cambiadapkcompuesta.Designer.cs @@ -0,0 +1,591 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Modelo; + +#nullable disable + +namespace Modelo.Migrations +{ + [DbContext(typeof(Context))] + [Migration("20240826222040_cambiadapkcompuesta")] + partial class cambiadapkcompuesta + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Entidades.Categoria", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Descripcion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("Categoria", (string)null); + }); + + modelBuilder.Entity("Entidades.Cliente", b => + { + b.Property("Cuit") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Cuit")); + + b.Property("Apellido") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Correo") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.HasKey("Cuit"); + + b.ToTable("Clientes", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdFactura") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.HasKey("Id", "IdFactura"); + + b.HasIndex("IdFactura"); + + b.HasIndex("IdProducto"); + + b.ToTable("DetallesFacturas", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdOrdenDeCompra") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCU") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdOrdenDeCompra"); + + b.HasIndex("IdOrdenDeCompra"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetalleOrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCUPropuesto") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdPresupuesto"); + + b.HasIndex("IdPresupuesto"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetallePresupuestos"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClienteCuit") + .HasColumnType("bigint"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("IdCliente") + .HasColumnType("bigint"); + + b.Property("Total") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ClienteCuit"); + + b.ToTable("Facturas", (string)null); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdRemito") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdRemito"); + + b.HasIndex("IdRemito"); + + b.HasIndex("ProductoId"); + + b.ToTable("Lotes"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Entregado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("OrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Aceptado") + .HasColumnType("bit"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Presupuestos"); + }); + + modelBuilder.Entity("Entidades.Producto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(21) + .HasColumnType("nvarchar(21)"); + + b.Property("EsPerecedero") + .HasColumnType("bit"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Precio") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Producto"); + + b.HasDiscriminator().HasValue("Producto"); + + b.UseTphMappingStrategy(); + }); + + modelBuilder.Entity("Entidades.Proveedor", b => + { + b.Property("Cuit") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Cuit")); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("RazonSocial") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("Cuit"); + + b.ToTable("Proveedores"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdProveedor") + .HasColumnType("int"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Remitos"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.Property("CategoriaId") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("CategoriaId", "ProductoId"); + + b.HasIndex("ProductoId"); + + b.ToTable("ProductoCategoria"); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.Property("ProveedorId") + .HasColumnType("bigint"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("ProveedorId", "ProductoId"); + + b.HasIndex("ProductoId"); + + b.ToTable("ProductoProveedor"); + }); + + modelBuilder.Entity("Entidades.ProductoNoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("TipoDeEnvase") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ProductoNoPercedero"); + }); + + modelBuilder.Entity("Entidades.ProductoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("MesesHastaConsumoPreferente") + .HasColumnType("int"); + + b.Property("MesesHastaVencimiento") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("ProductoPercedero"); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.HasOne("Entidades.Factura", null) + .WithMany("Detalles") + .HasForeignKey("IdFactura") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("IdProducto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.HasOne("Entidades.OrdenDeCompra", null) + .WithMany("Detalles") + .HasForeignKey("IdOrdenDeCompra") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.HasOne("Entidades.Presupuesto", null) + .WithMany("Detalles") + .HasForeignKey("IdPresupuesto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.HasOne("Entidades.Cliente", "Cliente") + .WithMany() + .HasForeignKey("ClienteCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cliente"); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.HasOne("Entidades.Remito", null) + .WithMany("Lotes") + .HasForeignKey("IdRemito") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.HasOne("Entidades.Categoria", null) + .WithMany() + .HasForeignKey("CategoriaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Proveedor", null) + .WithMany() + .HasForeignKey("ProveedorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Navigation("Lotes"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modelo/Migrations/20240826222040_cambiadapkcompuesta.cs b/Modelo/Migrations/20240826222040_cambiadapkcompuesta.cs new file mode 100644 index 0000000..fa1dcbe --- /dev/null +++ b/Modelo/Migrations/20240826222040_cambiadapkcompuesta.cs @@ -0,0 +1,54 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Modelo.Migrations +{ + /// + public partial class cambiadapkcompuesta : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropPrimaryKey( + name: "PK_ProductoProveedor", + table: "ProductoProveedor"); + + migrationBuilder.DropIndex( + name: "IX_ProductoProveedor_ProveedorId", + table: "ProductoProveedor"); + + migrationBuilder.AddPrimaryKey( + name: "PK_ProductoProveedor", + table: "ProductoProveedor", + columns: new[] { "ProveedorId", "ProductoId" }); + + migrationBuilder.CreateIndex( + name: "IX_ProductoProveedor_ProductoId", + table: "ProductoProveedor", + column: "ProductoId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropPrimaryKey( + name: "PK_ProductoProveedor", + table: "ProductoProveedor"); + + migrationBuilder.DropIndex( + name: "IX_ProductoProveedor_ProductoId", + table: "ProductoProveedor"); + + migrationBuilder.AddPrimaryKey( + name: "PK_ProductoProveedor", + table: "ProductoProveedor", + columns: new[] { "ProductoId", "ProveedorId" }); + + migrationBuilder.CreateIndex( + name: "IX_ProductoProveedor_ProveedorId", + table: "ProductoProveedor", + column: "ProveedorId"); + } + } +} diff --git a/Modelo/Migrations/20240827025739_CuitNotGenerateValue.Designer.cs b/Modelo/Migrations/20240827025739_CuitNotGenerateValue.Designer.cs new file mode 100644 index 0000000..7e8ffbd --- /dev/null +++ b/Modelo/Migrations/20240827025739_CuitNotGenerateValue.Designer.cs @@ -0,0 +1,585 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Modelo; + +#nullable disable + +namespace Modelo.Migrations +{ + [DbContext(typeof(Context))] + [Migration("20240827025739_CuitNotGenerateValue")] + partial class CuitNotGenerateValue + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Entidades.Categoria", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Descripcion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("Categoria", (string)null); + }); + + modelBuilder.Entity("Entidades.Cliente", b => + { + b.Property("Cuit") + .HasColumnType("bigint"); + + b.Property("Apellido") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Correo") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.HasKey("Cuit"); + + b.ToTable("Clientes", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdFactura") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.HasKey("Id", "IdFactura"); + + b.HasIndex("IdFactura"); + + b.HasIndex("IdProducto"); + + b.ToTable("DetallesFacturas", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdOrdenDeCompra") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCU") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdOrdenDeCompra"); + + b.HasIndex("IdOrdenDeCompra"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetalleOrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCUPropuesto") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdPresupuesto"); + + b.HasIndex("IdPresupuesto"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetallePresupuestos"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClienteCuit") + .HasColumnType("bigint"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("IdCliente") + .HasColumnType("bigint"); + + b.Property("Total") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ClienteCuit"); + + b.ToTable("Facturas", (string)null); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdRemito") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdRemito"); + + b.HasIndex("IdRemito"); + + b.HasIndex("ProductoId"); + + b.ToTable("Lotes"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Entregado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("OrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Aceptado") + .HasColumnType("bit"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Presupuestos"); + }); + + modelBuilder.Entity("Entidades.Producto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(21) + .HasColumnType("nvarchar(21)"); + + b.Property("EsPerecedero") + .HasColumnType("bit"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Precio") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Producto"); + + b.HasDiscriminator().HasValue("Producto"); + + b.UseTphMappingStrategy(); + }); + + modelBuilder.Entity("Entidades.Proveedor", b => + { + b.Property("Cuit") + .HasColumnType("bigint"); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("RazonSocial") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("Cuit"); + + b.ToTable("Proveedores"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdProveedor") + .HasColumnType("int"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Remitos"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.Property("CategoriaId") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("CategoriaId", "ProductoId"); + + b.HasIndex("ProductoId"); + + b.ToTable("ProductoCategoria"); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.Property("ProveedorId") + .HasColumnType("bigint"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("ProveedorId", "ProductoId"); + + b.HasIndex("ProductoId"); + + b.ToTable("ProductoProveedor"); + }); + + modelBuilder.Entity("Entidades.ProductoNoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("TipoDeEnvase") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ProductoNoPercedero"); + }); + + modelBuilder.Entity("Entidades.ProductoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("MesesHastaConsumoPreferente") + .HasColumnType("int"); + + b.Property("MesesHastaVencimiento") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("ProductoPercedero"); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.HasOne("Entidades.Factura", null) + .WithMany("Detalles") + .HasForeignKey("IdFactura") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("IdProducto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.HasOne("Entidades.OrdenDeCompra", null) + .WithMany("Detalles") + .HasForeignKey("IdOrdenDeCompra") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.HasOne("Entidades.Presupuesto", null) + .WithMany("detalles") + .HasForeignKey("IdPresupuesto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.HasOne("Entidades.Cliente", "Cliente") + .WithMany() + .HasForeignKey("ClienteCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cliente"); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.HasOne("Entidades.Remito", null) + .WithMany("Lotes") + .HasForeignKey("IdRemito") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.HasOne("Entidades.Categoria", null) + .WithMany() + .HasForeignKey("CategoriaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Proveedor", null) + .WithMany() + .HasForeignKey("ProveedorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Navigation("detalles"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Navigation("Lotes"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Modelo/Migrations/20240827025739_CuitNotGenerateValue.cs b/Modelo/Migrations/20240827025739_CuitNotGenerateValue.cs new file mode 100644 index 0000000..a9e2f14 --- /dev/null +++ b/Modelo/Migrations/20240827025739_CuitNotGenerateValue.cs @@ -0,0 +1,163 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Modelo.Migrations +{ + /// + public partial class CuitNotGenerateValue : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Facturas_Clientes_ClienteCuit", + table: "Facturas"); + + migrationBuilder.DropForeignKey( + name: "FK_Remitos_Proveedores_ProveedorCuit", + table: "Remitos"); + + migrationBuilder.DropForeignKey( + name: "FK_ProductoProveedor_Proveedores_ProveedorId", + table: "ProductoProveedor"); + + migrationBuilder.DropForeignKey( + name: "FK_Presupuestos_Proveedores_ProveedorCuit", + table: "Presupuestos"); + + migrationBuilder.DropForeignKey( + name: "FK_OrdenDeCompras_Proveedores_ProveedorCuit", + table: "OrdenDeCompras"); + + + migrationBuilder.DropPrimaryKey( + name:"PK_Clientes", + table: "Clientes"); + + migrationBuilder.DropColumn( + name:"Cuit", + table: "Clientes"); + + + migrationBuilder.DropPrimaryKey( + name: "PK_Proveedores", + table: "Proveedores"); + + migrationBuilder.DropColumn( + name:"Cuit", + table: "Proveedores"); + + migrationBuilder.AddColumn( + name: "Cuit", + table: "Clientes", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddPrimaryKey( + name: "PK_Clientes", + table: "Clientes", + column: "Cuit"); + + migrationBuilder.AddColumn( + name: "Cuit", + table: "Proveedores", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddPrimaryKey( + name: "PK_Proveedores", + table: "Proveedores", + column: "Cuit"); + + migrationBuilder.AddForeignKey( + name: "FK_Facturas_Clientes_ClienteCuit", + table: "Facturas", + column: "ClienteCuit", + principalTable: "Clientes", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Remitos_Proveedores_ProveedorCuit", + table: "Remitos", + column: "ProveedorCuit", + principalTable: "Proveedores", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_ProductoProveedor_Proveedores_ProveedorId", + table: "ProductoProveedor", + column: "ProveedorId", + principalTable: "Proveedores", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Presupuestos_Proveedores_ProveedorCuit", + table: "Presupuestos", + column: "ProveedorCuit", + principalTable: "Proveedores", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_OrdenDeCompras_Proveedores_ProveedorCuit", + table: "OrdenDeCompras", + column: "ProveedorCuit", + principalTable: "Proveedores", + principalColumn: "Cuit", + onDelete: ReferentialAction.Cascade); + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropPrimaryKey( + name: "Cuit", + table: "Clientes"); + + migrationBuilder.DropColumn( + name: "Cuit", + table: "Clientes"); + + + migrationBuilder.DropPrimaryKey( + name: "Cuit", + table: "Proveedores"); + + migrationBuilder.DropColumn( + name: "Cuit", + table: "Proveedores"); + + migrationBuilder.AddColumn( + name: "Cuit", + table: "Proveedores", + type: "bigint", + nullable: false, + defaultValue: 0L) + .Annotation("SqlServer:Identity", "1, 1"); + + migrationBuilder.AddColumn( + name: "Cuit", + table: "Clientes", + type: "bigint", + nullable: false, + defaultValue: 0L) + .Annotation("SqlServer:Identity", "1, 1"); + + migrationBuilder.AddPrimaryKey( + name: "Cuit", + table: "Proveedores", + column: "Cuit"); + + migrationBuilder.AddPrimaryKey( + name: "Cuit", + table: "Clientes", + column: "Cuit"); + + } + } +} diff --git a/Modelo/Migrations/ContextModelSnapshot.cs b/Modelo/Migrations/ContextModelSnapshot.cs index 522241d..3b25ab6 100644 --- a/Modelo/Migrations/ContextModelSnapshot.cs +++ b/Modelo/Migrations/ContextModelSnapshot.cs @@ -1,4 +1,5 @@ // +using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -16,10 +17,565 @@ namespace Modelo.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "8.0.7") + .HasAnnotation("ProductVersion", "8.0.8") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Entidades.Categoria", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Descripcion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("Categoria", (string)null); + }); + + modelBuilder.Entity("Entidades.Cliente", b => + { + b.Property("Cuit") + .HasColumnType("bigint"); + + b.Property("Apellido") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Correo") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.HasKey("Cuit"); + + b.ToTable("Clientes", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdFactura") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.HasKey("Id", "IdFactura"); + + b.HasIndex("IdFactura"); + + b.HasIndex("IdProducto"); + + b.ToTable("DetallesFacturas", (string)null); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdOrdenDeCompra") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCU") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdOrdenDeCompra"); + + b.HasIndex("IdOrdenDeCompra"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetalleOrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdPresupuesto") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("MontoCUPropuesto") + .HasColumnType("float"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdPresupuesto"); + + b.HasIndex("IdPresupuesto"); + + b.HasIndex("ProductoId"); + + b.ToTable("DetallePresupuestos"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClienteCuit") + .HasColumnType("bigint"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("IdCliente") + .HasColumnType("bigint"); + + b.Property("Total") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ClienteCuit"); + + b.ToTable("Facturas", (string)null); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.Property("Id") + .HasColumnType("int"); + + b.Property("IdRemito") + .HasColumnType("int"); + + b.Property("Cantidad") + .HasColumnType("int"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProducto") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("Id", "IdRemito"); + + b.HasIndex("IdRemito"); + + b.HasIndex("ProductoId"); + + b.ToTable("Lotes"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Entregado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("OrdenDeCompras"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Aceptado") + .HasColumnType("bit"); + + b.Property("Fecha") + .HasColumnType("datetime2"); + + b.Property("Habilitado") + .HasColumnType("bit"); + + b.Property("IdProveedor") + .HasColumnType("bigint"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Presupuestos"); + }); + + modelBuilder.Entity("Entidades.Producto", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Discriminator") + .IsRequired() + .HasMaxLength(21) + .HasColumnType("nvarchar(21)"); + + b.Property("EsPerecedero") + .HasColumnType("bit"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("Precio") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Producto"); + + b.HasDiscriminator().HasValue("Producto"); + + b.UseTphMappingStrategy(); + }); + + modelBuilder.Entity("Entidades.Proveedor", b => + { + b.Property("Cuit") + .HasColumnType("bigint"); + + b.Property("Direccion") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.Property("Habilitado") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("Nombre") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("RazonSocial") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("Cuit"); + + b.ToTable("Proveedores"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdProveedor") + .HasColumnType("int"); + + b.Property("ProveedorCuit") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("ProveedorCuit"); + + b.ToTable("Remitos"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.Property("CategoriaId") + .HasColumnType("int"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("CategoriaId", "ProductoId"); + + b.HasIndex("ProductoId"); + + b.ToTable("ProductoCategoria"); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.Property("ProveedorId") + .HasColumnType("bigint"); + + b.Property("ProductoId") + .HasColumnType("int"); + + b.HasKey("ProveedorId", "ProductoId"); + + b.HasIndex("ProductoId"); + + b.ToTable("ProductoProveedor"); + }); + + modelBuilder.Entity("Entidades.ProductoNoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("TipoDeEnvase") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ProductoNoPercedero"); + }); + + modelBuilder.Entity("Entidades.ProductoPercedero", b => + { + b.HasBaseType("Entidades.Producto"); + + b.Property("MesesHastaConsumoPreferente") + .HasColumnType("int"); + + b.Property("MesesHastaVencimiento") + .HasColumnType("int"); + + b.HasDiscriminator().HasValue("ProductoPercedero"); + }); + + modelBuilder.Entity("Entidades.DetalleFactura", b => + { + b.HasOne("Entidades.Factura", null) + .WithMany("Detalles") + .HasForeignKey("IdFactura") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("IdProducto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetalleOrdenDeCompra", b => + { + b.HasOne("Entidades.OrdenDeCompra", null) + .WithMany("Detalles") + .HasForeignKey("IdOrdenDeCompra") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.DetallePresupuesto", b => + { + b.HasOne("Entidades.Presupuesto", null) + .WithMany("detalles") + .HasForeignKey("IdPresupuesto") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.HasOne("Entidades.Cliente", "Cliente") + .WithMany() + .HasForeignKey("ClienteCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cliente"); + }); + + modelBuilder.Entity("Entidades.Lote", b => + { + b.HasOne("Entidades.Remito", null) + .WithMany("Lotes") + .HasForeignKey("IdRemito") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", "Producto") + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Producto"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.HasOne("Entidades.Proveedor", "Proveedor") + .WithMany() + .HasForeignKey("ProveedorCuit") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Proveedor"); + }); + + modelBuilder.Entity("ProductoCategoria", b => + { + b.HasOne("Entidades.Categoria", null) + .WithMany() + .HasForeignKey("CategoriaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("ProductoProveedor", b => + { + b.HasOne("Entidades.Producto", null) + .WithMany() + .HasForeignKey("ProductoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entidades.Proveedor", null) + .WithMany() + .HasForeignKey("ProveedorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Entidades.Factura", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.OrdenDeCompra", b => + { + b.Navigation("Detalles"); + }); + + modelBuilder.Entity("Entidades.Presupuesto", b => + { + b.Navigation("detalles"); + }); + + modelBuilder.Entity("Entidades.Remito", b => + { + b.Navigation("Lotes"); + }); #pragma warning restore 612, 618 } } diff --git a/Modelo/Repositorio.cs b/Modelo/Repositorio.cs index e04f9a0..40ee30e 100644 --- a/Modelo/Repositorio.cs +++ b/Modelo/Repositorio.cs @@ -4,7 +4,7 @@ namespace Modelo { public abstract class Repositorio { - protected Context context; + protected Context context = new Context(); //no voy a usar esta instancia igualmente public abstract List Listar(); public abstract void Add(T t); public abstract void Del(T t); @@ -16,11 +16,13 @@ namespace Modelo try { context.SaveChanges(); + context.Dispose(); + context = new Context(); ret = true; } - catch (DbUpdateException) + catch (DbUpdateException ex) { - throw; + Console.Error.WriteLine(ex); } return ret; diff --git a/Modelo/RepositorioCategoria.cs b/Modelo/RepositorioCategoria.cs index eab7cf9..d6fcc2b 100644 --- a/Modelo/RepositorioCategoria.cs +++ b/Modelo/RepositorioCategoria.cs @@ -10,7 +10,6 @@ namespace Modelo public RepositorioCategoria(Context context) { - this.context = context; } public override List Listar() @@ -20,7 +19,7 @@ namespace Modelo public Categoria ObtenerPorId(int Tid) { - Categoria cat = context.Categorias.First(x => x.Id == Tid); + Categoria cat = context.Categorias.FirstOrDefault(x => x.Id == Tid); return cat ?? new Categoria(); } diff --git a/Modelo/RepositorioClientes.cs b/Modelo/RepositorioClientes.cs index 7aaa13b..19f3393 100644 --- a/Modelo/RepositorioClientes.cs +++ b/Modelo/RepositorioClientes.cs @@ -7,6 +7,7 @@ namespace Modelo { public RepositorioClientes(Context context) { + this.context = context; } @@ -15,9 +16,9 @@ namespace Modelo return context.Clientes.ToList(); } - public Cliente ObtenerPorId(long Tid) + public Cliente ObtenerPorId(Int64 Tid) { - Cliente cli = context.Clientes.First(x => x.Cuit == Tid); + Cliente cli = context.Clientes.FirstOrDefault(x => x.Cuit == Tid); return cli ?? new Cliente(); } diff --git a/Vista/AddCategoria.Designer.cs b/Vista/FrmCategoria.Designer.cs similarity index 97% rename from Vista/AddCategoria.Designer.cs rename to Vista/FrmCategoria.Designer.cs index 479dd11..570231d 100644 --- a/Vista/AddCategoria.Designer.cs +++ b/Vista/FrmCategoria.Designer.cs @@ -1,6 +1,6 @@ namespace Vista { - partial class AddCategoria + partial class FrmCategoria { /// /// Required designer variable. @@ -90,7 +90,7 @@ btnAceptar.UseVisualStyleBackColor = true; btnAceptar.Click += button1_Click; // - // AddCategoria + // FrmCategoria // AcceptButton = btnAceptar; AutoScaleDimensions = new SizeF(7F, 15F); @@ -103,7 +103,7 @@ Controls.Add(label2); Controls.Add(label1); Controls.Add(btnCancelar); - Name = "AddCategoria"; + Name = "FrmCategoria"; Text = "Añadir Categoria"; ((System.ComponentModel.ISupportInitialize)numid).EndInit(); ResumeLayout(false); diff --git a/Vista/AddCategoria.cs b/Vista/FrmCategoria.cs similarity index 80% rename from Vista/AddCategoria.cs rename to Vista/FrmCategoria.cs index 26787ed..7563463 100644 --- a/Vista/AddCategoria.cs +++ b/Vista/FrmCategoria.cs @@ -12,10 +12,10 @@ using System.Windows.Forms; namespace Vista { - public partial class AddCategoria : Form + public partial class FrmCategoria : Form { private Categoria? categoria; - public AddCategoria() + public FrmCategoria() { InitializeComponent(); CargarDatos(); @@ -28,7 +28,12 @@ namespace Vista } private void CargarDatos() { - numid.Value = ControladoraCategorias.Instance.Listar().Max(x => x.Id + 1); + var list = ControladoraCategorias.Instance.Listar(); + var num = (list.Count == 0) ? + 1: + list.Max(x => x.Id + 1); + + numid.Value = num; numid.Enabled = false; } @@ -41,12 +46,6 @@ namespace Vista else if (textBox1.Text.Length > 100) // Ajusta el límite según sea necesario devolucion += "La descripción no puede superar los 100 caracteres\n"; - // Validar unicidad del ID solo si es una nueva categoría - if (categoria == null && ControladoraCategorias.Instance.Listar().Any(c => c.Id == (int)numid.Value)) - { - devolucion += "Ya existe una categoría con el mismo ID\n"; - } - if (devolucion == "") { return true; @@ -69,7 +68,6 @@ namespace Vista { categoria = new Categoria { - Id = (int)numid.Value, Descripcion = textBox1.Text }; diff --git a/Vista/AddCategoria.resx b/Vista/FrmCategoria.resx similarity index 99% rename from Vista/AddCategoria.resx rename to Vista/FrmCategoria.resx index a395bff..8b2ff64 100644 --- a/Vista/AddCategoria.resx +++ b/Vista/FrmCategoria.resx @@ -1,7 +1,7 @@  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Vista/FrmOrdenDeCompra.cs b/Vista/FrmOrdenDeCompra.cs index a7263eb..cccbbc8 100644 --- a/Vista/FrmOrdenDeCompra.cs +++ b/Vista/FrmOrdenDeCompra.cs @@ -73,7 +73,6 @@ namespace Vista IdOrdenDeCompra = Convert.ToInt32(numId.Value), MontoCU = detalle.MontoCUPropuesto, Producto = detalle.Producto, - presupuesto = pres, }); } diff --git a/Vista/FrmProducto.Designer.cs b/Vista/FrmProducto.Designer.cs index 7ddcd0b..8870f99 100644 --- a/Vista/FrmProducto.Designer.cs +++ b/Vista/FrmProducto.Designer.cs @@ -37,7 +37,6 @@ txtNombre = new TextBox(); numPrecio = new NumericUpDown(); checkHabilitado = new CheckBox(); - cmbCategoria = new ComboBox(); btnacept = new Button(); btncancel = new Button(); label6 = new Label(); @@ -52,13 +51,20 @@ label10 = new Label(); numericUpDown1 = new NumericUpDown(); numericUpDown2 = new NumericUpDown(); - comboBox1 = new ComboBox(); + cmbEnvase = new ComboBox(); + dgvCategoria = new DataGridView(); + label11 = new Label(); + dgvCategoriaAñadida = new DataGridView(); + btnaddCategoria = new Button(); + btnrmCategoria = new Button(); ((System.ComponentModel.ISupportInitialize)numId).BeginInit(); ((System.ComponentModel.ISupportInitialize)numPrecio).BeginInit(); ((System.ComponentModel.ISupportInitialize)dgvProveedorAñadido).BeginInit(); ((System.ComponentModel.ISupportInitialize)dgvProveedor).BeginInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown1).BeginInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown2).BeginInit(); + ((System.ComponentModel.ISupportInitialize)dgvCategoria).BeginInit(); + ((System.ComponentModel.ISupportInitialize)dgvCategoriaAñadida).BeginInit(); SuspendLayout(); // // label1 @@ -100,7 +106,7 @@ // label5 // label5.AutoSize = true; - label5.Location = new Point(7, 142); + label5.Location = new Point(373, 9); label5.Name = "label5"; label5.Size = new Size(58, 15); label5.TabIndex = 4; @@ -140,18 +146,9 @@ checkHabilitado.TabIndex = 8; checkHabilitado.UseVisualStyleBackColor = true; // - // cmbCategoria - // - cmbCategoria.DropDownStyle = ComboBoxStyle.DropDownList; - cmbCategoria.FormattingEnabled = true; - cmbCategoria.Location = new Point(70, 134); - cmbCategoria.Name = "cmbCategoria"; - cmbCategoria.Size = new Size(121, 23); - cmbCategoria.TabIndex = 9; - // // btnacept // - btnacept.Location = new Point(14, 336); + btnacept.Location = new Point(13, 311); btnacept.Name = "btnacept"; btnacept.Size = new Size(72, 21); btnacept.TabIndex = 10; @@ -161,7 +158,7 @@ // // btncancel // - btncancel.Location = new Point(106, 336); + btncancel.Location = new Point(105, 311); btncancel.Name = "btncancel"; btncancel.Size = new Size(68, 21); btncancel.TabIndex = 11; @@ -172,7 +169,7 @@ // label6 // label6.AutoSize = true; - label6.Location = new Point(230, 12); + label6.Location = new Point(652, 216); label6.Name = "label6"; label6.Size = new Size(123, 15); label6.TabIndex = 12; @@ -181,7 +178,7 @@ // label7 // label7.AutoSize = true; - label7.Location = new Point(494, 9); + label7.Location = new Point(652, 9); label7.Name = "label7"; label7.Size = new Size(72, 15); label7.TabIndex = 13; @@ -193,9 +190,8 @@ dgvProveedorAñadido.AllowUserToDeleteRows = false; dgvProveedorAñadido.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dgvProveedorAñadido.EditMode = DataGridViewEditMode.EditProgrammatically; - dgvProveedorAñadido.Location = new Point(230, 30); + dgvProveedorAñadido.Location = new Point(652, 234); dgvProveedorAñadido.Name = "dgvProveedorAñadido"; - dgvProveedorAñadido.RowTemplate.Height = 25; dgvProveedorAñadido.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgvProveedorAñadido.Size = new Size(240, 150); dgvProveedorAñadido.TabIndex = 14; @@ -204,7 +200,7 @@ // dgvProveedor.AllowUserToAddRows = false; dgvProveedor.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgvProveedor.Location = new Point(494, 30); + dgvProveedor.Location = new Point(652, 30); dgvProveedor.Name = "dgvProveedor"; dgvProveedor.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgvProveedor.Size = new Size(240, 150); @@ -212,7 +208,7 @@ // // btnaddProveedor // - btnaddProveedor.Location = new Point(740, 30); + btnaddProveedor.Location = new Point(652, 186); btnaddProveedor.Name = "btnaddProveedor"; btnaddProveedor.Size = new Size(72, 21); btnaddProveedor.TabIndex = 16; @@ -222,7 +218,7 @@ // // btnrmProveedor // - btnrmProveedor.Location = new Point(740, 57); + btnrmProveedor.Location = new Point(820, 186); btnrmProveedor.Name = "btnrmProveedor"; btnrmProveedor.Size = new Size(72, 21); btnrmProveedor.TabIndex = 17; @@ -233,7 +229,7 @@ // checkBox1 // checkBox1.AutoSize = true; - checkBox1.Location = new Point(7, 187); + checkBox1.Location = new Point(6, 183); checkBox1.Name = "checkBox1"; checkBox1.Size = new Size(79, 19); checkBox1.TabIndex = 18; @@ -244,7 +240,7 @@ // label8 // label8.AutoSize = true; - label8.Location = new Point(25, 230); + label8.Location = new Point(24, 205); label8.Name = "label8"; label8.Size = new Size(185, 15); label8.TabIndex = 20; @@ -253,7 +249,7 @@ // label9 // label9.AutoSize = true; - label9.Location = new Point(141, 289); + label9.Location = new Point(140, 264); label9.Name = "label9"; label9.Size = new Size(69, 15); label9.TabIndex = 21; @@ -262,7 +258,7 @@ // label10 // label10.AutoSize = true; - label10.Location = new Point(68, 259); + label10.Location = new Point(67, 234); label10.Name = "label10"; label10.Size = new Size(142, 15); label10.TabIndex = 22; @@ -271,7 +267,7 @@ // numericUpDown1 // numericUpDown1.Enabled = false; - numericUpDown1.Location = new Point(230, 222); + numericUpDown1.Location = new Point(229, 197); numericUpDown1.Name = "numericUpDown1"; numericUpDown1.Size = new Size(120, 23); numericUpDown1.TabIndex = 23; @@ -280,20 +276,71 @@ // numericUpDown2 // numericUpDown2.Enabled = false; - numericUpDown2.Location = new Point(229, 252); + numericUpDown2.Location = new Point(228, 227); numericUpDown2.Name = "numericUpDown2"; numericUpDown2.Size = new Size(120, 23); numericUpDown2.TabIndex = 24; numericUpDown2.ValueChanged += numericUpDown2_ValueChanged; // - // comboBox1 + // cmbEnvase // - comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; - comboBox1.FormattingEnabled = true; - comboBox1.Location = new Point(228, 281); - comboBox1.Name = "comboBox1"; - comboBox1.Size = new Size(121, 23); - comboBox1.TabIndex = 25; + cmbEnvase.DropDownStyle = ComboBoxStyle.DropDownList; + cmbEnvase.FormattingEnabled = true; + cmbEnvase.Location = new Point(227, 256); + cmbEnvase.Name = "cmbEnvase"; + cmbEnvase.Size = new Size(121, 23); + cmbEnvase.TabIndex = 25; + // + // dgvCategoria + // + dgvCategoria.AllowUserToAddRows = false; + dgvCategoria.AllowUserToDeleteRows = false; + dgvCategoria.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dgvCategoria.EditMode = DataGridViewEditMode.EditProgrammatically; + dgvCategoria.Location = new Point(373, 30); + dgvCategoria.Name = "dgvCategoria"; + dgvCategoria.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dgvCategoria.Size = new Size(240, 150); + dgvCategoria.TabIndex = 26; + // + // label11 + // + label11.AutoSize = true; + label11.Location = new Point(373, 216); + label11.Name = "label11"; + label11.Size = new Size(108, 15); + label11.TabIndex = 27; + label11.Text = "Categoria Añadida "; + // + // dgvCategoriaAñadida + // + dgvCategoriaAñadida.AllowUserToAddRows = false; + dgvCategoriaAñadida.AllowUserToDeleteRows = false; + dgvCategoriaAñadida.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dgvCategoriaAñadida.EditMode = DataGridViewEditMode.EditProgrammatically; + dgvCategoriaAñadida.Location = new Point(373, 234); + dgvCategoriaAñadida.Name = "dgvCategoriaAñadida"; + dgvCategoriaAñadida.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dgvCategoriaAñadida.Size = new Size(240, 150); + dgvCategoriaAñadida.TabIndex = 28; + // + // btnaddCategoria + // + btnaddCategoria.Location = new Point(373, 186); + btnaddCategoria.Name = "btnaddCategoria"; + btnaddCategoria.Size = new Size(72, 21); + btnaddCategoria.TabIndex = 29; + btnaddCategoria.Text = "Añadir"; + btnaddCategoria.UseVisualStyleBackColor = true; + // + // btnrmCategoria + // + btnrmCategoria.Location = new Point(541, 186); + btnrmCategoria.Name = "btnrmCategoria"; + btnrmCategoria.Size = new Size(72, 21); + btnrmCategoria.TabIndex = 30; + btnrmCategoria.Text = "Eliminar"; + btnrmCategoria.UseVisualStyleBackColor = true; // // FrmProducto // @@ -301,8 +348,13 @@ AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; CancelButton = btncancel; - ClientSize = new Size(877, 369); - Controls.Add(comboBox1); + ClientSize = new Size(1219, 517); + Controls.Add(btnrmCategoria); + Controls.Add(btnaddCategoria); + Controls.Add(dgvCategoriaAñadida); + Controls.Add(label11); + Controls.Add(dgvCategoria); + Controls.Add(cmbEnvase); Controls.Add(numericUpDown2); Controls.Add(numericUpDown1); Controls.Add(label10); @@ -317,7 +369,6 @@ Controls.Add(label6); Controls.Add(btncancel); Controls.Add(btnacept); - Controls.Add(cmbCategoria); Controls.Add(checkHabilitado); Controls.Add(numPrecio); Controls.Add(txtNombre); @@ -335,6 +386,8 @@ ((System.ComponentModel.ISupportInitialize)dgvProveedor).EndInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown1).EndInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown2).EndInit(); + ((System.ComponentModel.ISupportInitialize)dgvCategoria).EndInit(); + ((System.ComponentModel.ISupportInitialize)dgvCategoriaAñadida).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -350,7 +403,6 @@ private TextBox txtNombre; private NumericUpDown numPrecio; private CheckBox checkHabilitado; - private ComboBox cmbCategoria; private Button btnacept; private Button btncancel; private Label label6; @@ -365,6 +417,11 @@ private Label label10; private NumericUpDown numericUpDown1; private NumericUpDown numericUpDown2; - private ComboBox comboBox1; + private ComboBox cmbEnvase; + private DataGridView dgvCategoria; + private Label label11; + private DataGridView dgvCategoriaAñadida; + private Button btnaddCategoria; + private Button btnrmCategoria; } } \ No newline at end of file diff --git a/Vista/FrmProducto.cs b/Vista/FrmProducto.cs index bfb7f8a..0ffde58 100644 --- a/Vista/FrmProducto.cs +++ b/Vista/FrmProducto.cs @@ -33,7 +33,7 @@ namespace Vista } private void cargarcombo() { - comboBox1.DataSource = Enum.GetValues(typeof(EnvaseTipo)); + cmbEnvase.DataSource = Enum.GetValues(typeof(EnvaseTipo)); } private void InicializarFormulario() { @@ -42,8 +42,7 @@ namespace Vista txtNombre.Text = nuevoproducto.Nombre; numPrecio.Value = (decimal)nuevoproducto.Precio; checkHabilitado.Checked = nuevoproducto.Habilitado; - cmbCategoria.SelectedValue = nuevoproducto.Categoria.Id; - dgvProveedorAñadido.DataSource = nuevoproducto.ListarProveedores(); + dgvProveedorAñadido.DataSource = nuevoproducto.proveedores.AsReadOnly(); } @@ -62,16 +61,7 @@ namespace Vista private void CargarCategorias() { - // Obtener la lista de categorías desde la controladora - var categorias = ControladoraCategorias.Instance.Listar(); - - // Configurar el ComboBox para categorías - cmbCategoria.DisplayMember = "Descripcion"; // Mostrar la propiedad Descripcion - cmbCategoria.ValueMember = "Id"; // Usar la propiedad Id como valor - - // Asignar la lista de categorías al ComboBox - cmbCategoria.DataSource = categorias; - + var listprod = ControladoraProductos.Instance.Listar(); numId.Value = (listprod.Count > 0) ? listprod.Max(x => x.Id + 1) : @@ -100,14 +90,11 @@ namespace Vista devolucion += "Ya existe un producto con el mismo ID.\n"; } - // Validar Categoría Seleccionada - if (cmbCategoria.SelectedItem == null) - { - devolucion += "Debe seleccionar una categoría.\n"; - } + // Validar Categoría Seleccionada (wip) + //devolucion += "Debe seleccionar una categoría.\n"; // Validar Tipo de Producto - if (!checkBox1.Checked && comboBox1.SelectedItem == null) + if (!checkBox1.Checked && cmbEnvase.SelectedItem == null) { devolucion += "Debe seleccionar un tipo de envase para el producto no perecedero.\n"; } @@ -144,19 +131,18 @@ namespace Vista Nombre = txtNombre.Text, Precio = (double)numPrecio.Value, Habilitado = checkHabilitado.Checked, - Categoria = (Categoria)cmbCategoria.SelectedItem, MesesHastaConsumoPreferente = (int)numericUpDown1.Value, MesesHastaVencimiento = (int)numericUpDown2.Value, }; - foreach (var proveedor in nuevoproducto.ListarProveedores()) + foreach (var proveedor in nuevoproducto.proveedores.AsReadOnly()) { productoPerecedero.AñadirProveedor(proveedor); } string mensaje = mod - ? ControladoraProductos.Instance.Modificar(productoPerecedero) - : ControladoraProductos.Instance.Añadir(productoPerecedero); + ? ControladoraProductoPercedero.Instance.Modificar(productoPerecedero) + : ControladoraProductoPercedero.Instance.Añadir(productoPerecedero); MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); } @@ -168,17 +154,16 @@ namespace Vista Nombre = txtNombre.Text, Precio = (double)numPrecio.Value, Habilitado = checkHabilitado.Checked, - Categoria = (Categoria)cmbCategoria.SelectedItem, - TipoDeEnvase = (EnvaseTipo)comboBox1.SelectedItem, + TipoDeEnvase = (EnvaseTipo)cmbEnvase.SelectedItem, }; - foreach (var proveedor in nuevoproducto.ListarProveedores()) + foreach (var proveedor in nuevoproducto.proveedores.AsReadOnly()) { productoNoPerecedero.AñadirProveedor(proveedor); } string mensaje = mod - ? ControladoraProductos.Instance.Modificar(productoNoPerecedero) - : ControladoraProductos.Instance.Añadir(productoNoPerecedero); + ? ControladoraProductoNoPercedero.Instance.Modificar(productoNoPerecedero) + : ControladoraProductoNoPercedero.Instance.Añadir(productoNoPerecedero); MessageBox.Show(mensaje, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information); } @@ -204,7 +189,7 @@ namespace Vista foreach (DataGridViewRow selectedRow in dgvProveedor.SelectedRows) { Proveedor proveedor = (Proveedor)selectedRow.DataBoundItem; - var checkcolicion = nuevoproducto.ListarProveedores().Contains(proveedor); + var checkcolicion = nuevoproducto.proveedores.Contains(proveedor); if (checkcolicion) { MessageBox.Show("El proveedor ya fue cargado"); @@ -212,7 +197,7 @@ namespace Vista } nuevoproducto.AñadirProveedor(proveedor); dgvProveedorAñadido.DataSource = null; - dgvProveedorAñadido.DataSource = nuevoproducto.ListarProveedores(); + dgvProveedorAñadido.DataSource = nuevoproducto.proveedores.AsReadOnly(); } } else @@ -233,7 +218,7 @@ namespace Vista Proveedor proveedor = (Proveedor)selectedRow.DataBoundItem; nuevoproducto.EliminarProveedor(proveedor); dgvProveedorAñadido.DataSource = null; - dgvProveedorAñadido.DataSource = nuevoproducto.ListarProveedores(); + dgvProveedorAñadido.DataSource = nuevoproducto.proveedores.AsReadOnly(); } } else @@ -253,7 +238,7 @@ namespace Vista numericUpDown1.Enabled = esPerecedero; numericUpDown2.Enabled = esPerecedero; - comboBox1.Enabled = !esPerecedero; + cmbEnvase.Enabled = !esPerecedero; } private void numericUpDown2_ValueChanged(object sender, EventArgs e) diff --git a/Vista/FrmProducto.resx b/Vista/FrmProducto.resx index af32865..8b2ff64 100644 --- a/Vista/FrmProducto.resx +++ b/Vista/FrmProducto.resx @@ -1,7 +1,7 @@  7B?Z7t3e0Kca5qrES2ZXyxj+ z8)>oIEND+7-nKO4PA)41e~w62e3Ph0qM(Lj%cw^^6ZjC`?eM#*%}CcPskoK>Xdg$Z z7w;~z@CoCLNEzFVo+HR*xb0)6qw#KK={Rmj9x0SRfVU&rf?D$b0F8~~jd-KP?`{gy zjE+b?9t-5{QUf*Oy;1}6UxH5$bjyS{0AqMB6~jA#C1`OYMi5IYAvNNy6!%>Nuo2p& zIG4fB#|r6>X7oV@9(~9$fe3{$B1iU2z8>5^f1$^A{XbVt3nPS; A+5i9m literal 16896 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 AlK=n! delta 4164 zcmZvf3s_Xu7RUEF4D+60W8Yb})luXC;nwpB} zNkn{H^hW7tAcaL@eu0mCq?T58)l_ai@>ZIU&mPj3_rK0Kw(oZxzTe*azt-Msuf5JW zbC{2p3STS{s{2lO%fMK~e8#Gcj6KaT&Yo3T@bdIB4B0W*6l5En&Az~R0gay>{oFwG z!~LN9LZ{CxngX4!n&^MQ_5Q&6l;ql*4XOi*^~V>juD04U;j0IlEzUSOvQTegL;(6>jz$2KQrWBVVSB^JNAQ5Jy_c z2E-{@CKv*;!8kA(ya+168}d9A0;$-BI2GFpwu5HSA^SA!RGfyL0iED`Q0>$po(6F= z>_(hh!|q}*z@=fcz+#t{tpF0J16x3cQ;U;n5tNeBv289L+X+4dd%*$l88`)8@j5mQ z%m!89AMtwjHfRKOE! zd8}hofRM)fiI<-k-#2^7mst z5B(JXaZXeGC;yu7X0*Xme;F7Bpy!F-fSzBkCVziU)A|9NCO|^p9kLcwEs9xQ$fbNIRj0Yz-gK= zk<;XVfz#xl#A)*9a+>^;IZb~0X7wgSes><8aIb+*kk4tV$W%^KMW#X1MWheSpU!DI z@r%Igrwt1@O&iYOH2iM%5@(Ys(pR|&v|t{m z)zWrddDj01e4Y1WyoA%VekrG^0?Rl}{x_s~`Yd-fa^SOA&FLV_TEl6|QsOjS__e62 zcRhXC)S`%9O}o@_n*1BN_0Sf!nX4O3sF#i#M!5IJiWm#b9!D>F^e&~`o8##y0y`T| z?{|T1!V84@6?g$K=DKU_^ z?tVJKR`&IYfA{}s>SzC2DJHGjeR-7q*xG=6Khx^PU+Q#Sna%s9Ow&?Z>$1>{@uAu6 zc~cwjtS>yc_n_urR??lUcMP?uXKn5SA4%6up|+O$;||Z>e!XZ%pShjWgVfm(CG8!$ zF<=!4pjIJ zIdXAZOjTV#;PBF-{PMh6MZ=^K{y~z%|9zWzWZi24*A3CC&Y_DI4*x!_t+A_XV|DB1 ze%g;ll--*Ab<6Mm(V~0c%--knE-S(>AFV0>Dcy%mW7e{cuIX0{4Yf~PdTr8= zK8!U=LkIiBn_mBU@t;e!I5OLM&b+>)+m)1aFqSXxL+=AIDd4? ztwn=2Y)q)Ub1eV%r@wYR+v9xI&-?8)W9}xddF!NQ&y0n4bFO@wy4BjDH0*MVOJh=- z2WfWJe0aOEDk0)hMf+(-cC1?auC3#gsd#;_#@_Flva5ccP>^~gcmLvIv*~C~XTji> zCkxAx*Sy_tcdPTv{ViAXTHij`+psRUPfXtS+8eQZ9fKC{(T^=1H+a%XYxI;66JHIQ z)AIS=-O;Ce?O6Xo-JymC=|bbKjbRaACcEdI3klEOy!OV0*n7U^871qluX_HYZz`h- zE5fz}eO2Z@ws*+d*t&7U|JautvO+o8v@&>k@xFb}^$o6icE8KoeCI{eur*Iu-zj-h zasO{!+q%X0&&_d+{Z{*w{?=?&$j%E%QB$?2Puvp2%-81cUw*ab>WPcGmCvW0TG(=L z|LwNRTYpi^X}u#z9|WBjllry1X}ud6s0^m>3xzUN?o@V9*HYWxCC)i-tX!1p@5X9>7U}s7(U1yLp zRrmCCk#eW;q_6RuP~$14##2n4$EfohTkn~vkMd-ykq;_o>ddYzlU5~mm*SF4y+R*d z$z~Czl-Kct%|n(+D%LJ-iKu89g2f&A^F+DWzWwFt~9$OVmo*~%R& zORMpm$CJAHLFzWysPo(o`WShsg4CXpU_V4B8+-S-=#VF z1S9JKqDg}!Be|?;$H76KY_y*JwRR~sy@#NchNSlld-P@W+>oMZvg@Q3=}FOe%LzRY z)#klv5LJliE3g0&KYvgQWF+U}kj|z%!b6Zts%XMHQE;XStfv?(-+MaDdD>5-W66<{ zB_k^EQG2&6kcMRpai|~M&Jmvbp_d8&0|^FX5ceR1-jsn^I-Suwr6*TGnx3YSk8A1H cmy|YA4rS>kzru~7$z-%z2T*71h2Iwc1@lDxlK=n! diff --git a/testing/bin/Debug/net8.0/Modelo.dll b/testing/bin/Debug/net8.0/Modelo.dll index e17a9a8ad181b95d389239de0dd15a0704bcda3c..1cb3125b6c674e4aef759e005479b145ccf029ee 100644 GIT binary patch literal 118272 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 Uwn5LoefY0}vj1Pl`|W}M3nVpw6aWAK literal 22016 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 Mi1v>`{+=`N?|SYyP5=M^ diff --git a/testing/bin/Debug/net8.0/Modelo.pdb b/testing/bin/Debug/net8.0/Modelo.pdb index cff6e25a94b4bb4e3f2390232a814c64b2b1f2c2..5f2e88a331cbfb1b5d034c194bc33a8090d3d053 100644 GIT binary patch literal 31708 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 ~T=eQg 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 diff --git a/testing/bin/Debug/net8.0/testing.dll b/testing/bin/Debug/net8.0/testing.dll index 3dc3a02f0d737bdb7ae020b52798e245b3f9bc70..4494587f1c24fc7f67ad270d63bacf899fce8adc 100644 GIT binary patch delta 234 zcmZqBXwaC@!NRfh$-<32Jsbj7H-zJRa?D)U#s2+Moi{0evIgfz4Ks5CLra5X6O$w} zGfM*l%M_y&3zJmCGz$|;LqqeFRD%>l3sVcTw8@TK;w<}E@2r>{!xbQ)7$cjO^19iv zX&Y}<>_gke$$PlM6rh5IhoFKW)uu1cl-+%BnxQIFIB~NP_a$b3GX`@80|r9|OCXud zU;>0m3}!$G;u`?T6b2(8wg8H!0#&7fS(ZSSAy8imP|N^G8UjU4f!K^8ZF4aHS{4Az C07WbP4IMI(7xgB+_(wXCTnnh)G#tJPc*blvM@{LLcJdysFa@aKT9_b6wf*+B-|DjN+p-FZZP;wYeTmuMh{1%xoFS3Hkin86 ziNONM1F?;Pv;{*dkTd|Y4S;MjAT$O-OCUC5Fa@eL1=1-DMnGr`lurXfpjn%P`PZ@l E093?8)&Kwi diff --git a/testing/bin/Debug/net8.0/testing.pdb b/testing/bin/Debug/net8.0/testing.pdb index 0562991cbe80a50864bee01fb991efaa4e3d6914..8b8391a935bcb3fd384446f3a50a78dc2f021f02 100644 GIT binary patch delta 135 zcmV;20C@k9Y>;e_d=w#E9cElxBf{fe%zyJWXk)^^?!>&Prgnt9z pSe%8kp9hf%7~fW;t^mLQ0K>I&;e_d=!wp=ix*W15JXeEDrd)T|HfKJ(sbNPy`@@PH=V#+gC>hlxQY@gl$zyJW0=&0vB&wNFK%<7Rf p{5vSKp9hf%7>TiBzyP2C0H(W`$x~_^M4YDi^lSKZ`m;z8$Rtj>KIi}d diff --git a/testing/obj/Debug/net8.0/ref/testing.dll b/testing/obj/Debug/net8.0/ref/testing.dll index 864e3e4a87850af7a53348278685f3d5da031ae2..601ebe7dadee04c30e4bf9f68d64f14f1875d091 100644 GIT binary patch delta 194 zcmZqBY0#O_!IHpj(zmgvgjqoL@k>jl=QfVLw;tw6&YIk^S&-#Djl=QfVLw;tw6&YIk^S&-#DhEO0gzP&j~0$3N5+v`&H)RPs|8lGfB_-`4h~a!b97~GE<u zzXd{*xCTp;?E_Z>0RbwL5f~nmd=(6no+t^E&=m-iuK_NTLH)Cn0gzP&`r4VL)Vz^f&H)LtDgk%`lXM45lRX4ilfMTtlQIQV2Bf_s Lw8*@(j0NCtoCFu0 diff --git a/testing/obj/Debug/net8.0/testing.dll b/testing/obj/Debug/net8.0/testing.dll index 3dc3a02f0d737bdb7ae020b52798e245b3f9bc70..4494587f1c24fc7f67ad270d63bacf899fce8adc 100644 GIT binary patch delta 234 zcmZqBXwaC@!NRfh$-<32Jsbj7H-zJRa?D)U#s2+Moi{0evIgfz4Ks5CLra5X6O$w} zGfM*l%M_y&3zJmCGz$|;LqqeFRD%>l3sVcTw8@TK;w<}E@2r>{!xbQ)7$cjO^19iv zX&Y}<>_gke$$PlM6rh5IhoFKW)uu1cl-+%BnxQIFIB~NP_a$b3GX`@80|r9|OCXud zU;>0m3}!$G;u`?T6b2(8wg8H!0#&7fS(ZSSAy8imP|N^G8UjU4f!K^8ZF4aHS{4Az C07WbP4IMI(7xgB+_(wXCTnnh)G#tJPc*blvM@{LLcJdysFa@aKT9_b6wf*+B-|DjN+p-FZZP;wYeTmuMh{1%xoFS3Hkin86 ziNONM1F?;Pv;{*dkTd|Y4S;MjAT$O-OCUC5Fa@eL1=1-DMnGr`lurXfpjn%P`PZ@l E093?8)&Kwi diff --git a/testing/obj/Debug/net8.0/testing.pdb b/testing/obj/Debug/net8.0/testing.pdb index 0562991cbe80a50864bee01fb991efaa4e3d6914..8b8391a935bcb3fd384446f3a50a78dc2f021f02 100644 GIT binary patch delta 135 zcmV;20C@k9Y>;e_d=w#E9cElxBf{fe%zyJWXk)^^?!>&Prgnt9z pSe%8kp9hf%7~fW;t^mLQ0K>I&;e_d=!wp=ix*W15JXeEDrd)T|HfKJ(sbNPy`@@PH=V#+gC>hlxQY@gl$zyJW0=&0vB&wNFK%<7Rf p{5vSKp9hf%7>TiBzyP2C0H(W`$x~_^M4YDi^lSKZ`m;z8$Rtj>KIi}d