Agregar archivos de proyecto.

This commit is contained in:
2026-01-23 12:45:41 +01:00
parent 5ed4e0bc46
commit c8d1044267
237 changed files with 34721 additions and 0 deletions

View File

@@ -0,0 +1,460 @@
<tsWPF:tsUserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" xmlns:dxdo="http://schemas.devexpress.com/winfx/2008/xaml/docking"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:tsWPF="clr-namespace:tsWPFCore;assembly=tsWPFCore" xmlns:Serialization="clr-namespace:DevExpress.Xpf.LayoutControl.Serialization;assembly=DevExpress.Xpf.LayoutControl.v23.2" x:Class="ucFacturaRecibida"
mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="1400">
<tsWPF:tsUserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/tsWPFCore;component/Plantillas.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="RejillaAnidadaStyle" TargetType="{x:Type dxg:RowControl}">
<Setter Property="Background" Value="#B0E0E6" />
</Style>
</ResourceDictionary>
</tsWPF:tsUserControl.Resources>
<Grid x:Name="contenido" HorizontalAlignment="Stretch" Width="Auto">
<dxlc:LayoutControl x:Name="LayoutControl1" Orientation="Vertical">
<dxlc:LayoutGroup Header="Datos De la Factura" View="GroupBox" IsLocked="True" Width="Auto" HorizontalAlignment="Stretch" Orientation="Vertical">
<dxlc:LayoutGroup Orientation="Horizontal">
<dxlc:LayoutGroup Orientation="Vertical" Width="840">
<dxlc:LayoutGroup Orientation="Horizontal">
<tsWPF:tsLayoutItem Label="Nº Registro:" Width="180">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="False" Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding idFactura, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="100" NullText="« AUTOMÁTICO »">
<dxe:TextEdit.NullValue>
<sys:Int32>0</sys:Int32>
</dxe:TextEdit.NullValue>
</dxe:TextEdit>
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Fecha Registro:" Width="200">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:DateEdit EditValue="{Binding FechaRegistro, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="101" DisplayFormatString="yyyy/MM/dd HH:mm" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Razón Social:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Obligatorio="True" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:ComboBoxEdit x:Name="cbRazonSocial" AutoComplete="True" ValidateOnTextInput="False" IsTextEditable="True" DisplayMember="RazonSocialNIF" ValueMember="idEntidad" EditValue="{Binding idProveedor_Nulable, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" AllowDefaultButton="False" TabIndex="1">
<dxe:ComboBoxEdit.Buttons>
<dxe:ButtonInfo x:Name="biBuscarProveedor" GlyphKind="Search" IsDefaultButton="False" Click="BiBuscarProveedor_Click" />
</dxe:ComboBoxEdit.Buttons>
</dxe:ComboBoxEdit>
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Horizontal">
<tsWPF:tsLayoutItem Label="Categoría:" >
<dxe:ComboBoxEdit x:Name="cbCategoria" EditValue="{Binding idCategoria, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" ValueMember="idEnumeracion" DisplayMember="Descripcion" AutoComplete="True" IncrementalFiltering="True" ImmediatePopup="True" TabIndex="4" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Fecha Pago:" Width="250">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="False" Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:DateEdit EditValue="{Binding FechaPago, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="5" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Observaciones:">
<dxe:TextEdit EditValue="{Binding Observaciones, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="6" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Horizontal">
<dxlc:LayoutGroup Orientation="Vertical" Width="420">
<dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Nº Factura:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Obligatorio="True" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding NumeroFactura, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="2" Mask="G" MaskUseAsDisplayFormat="True" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Fecha Factura:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Obligatorio="True" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:DateEdit EditValue="{Binding FechaFactura, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true, Converter={StaticResource DateOnlyToDateTimeConverter}}" TabIndex="3" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Usuario:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="False" Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding idUsuarioNavigation.Nombre, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="200" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
</dxlc:LayoutGroup>
</dxlc:LayoutGroup>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Header="Datos del Proveedor" View="GroupBox" Width="Auto" HorizontalAlignment="Stretch" x:Name="lgDatosProveedor" IsCollapsible="True" IsCollapsed="False">
<dxlc:LayoutGroup Orientation="Vertical" Width="465">
<tsWPF:tsLayoutItem Label="Direccion:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding Direccion, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teDireccionProveedor" TabIndex="7" />
</tsWPF:tsLayoutItem>
<dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Teléfono 1:" Width="230">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" MayusculasMinusculas="Normal" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding Telefono1, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teTelefono1Proveedor" TabIndex="11" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Teléfono 2:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding Telefono2, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teTelefono2Proveedor" TabIndex="12" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Vertical" Width="800">
<dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Código Postal:" Width="190">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding CodigoPostal, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="8" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Población:" x:Name="Poblacion" Width="318">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding Poblacion, Mode=OneWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="9" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Provincia:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding Provincia, Mode=OneWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" TabIndex="10" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Email:" Width="512" HorizontalAlignment="Left">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" MayusculasMinusculas="Normal" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit EditValue="{Binding Email, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teEmailProveedor" TabIndex="13" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
</dxlc:LayoutGroup>
<dx:DXTabControl x:Name="DXTabPersonal1" Width="Auto" HorizontalAlignment="Stretch">
<dx:DXTabControl.View>
<dx:TabControlScrollView />
</dx:DXTabControl.View>
<dx:DXTabItem Header="Detalle Factura">
<dxlc:LayoutGroup Orientation="Vertical">
<tsWPF:tsGridControl x:Name="gcDetalle" TabIndex="25" >
<tsWPF:tsGridControl.PropiedadesTSGC>
<tsWPF:PropiedadesTSGC CamposObligatorios="idProducto,Cantidad,Precio,idTipoIva" />
</tsWPF:tsGridControl.PropiedadesTSGC>
<tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:PropiedadesTS />
</tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:tsGridControl.View>
<tsWPF:tsTableView x:Name="tvDetalle" ShowGroupPanel="False" NewItemRowPosition="Bottom" TabIndex="14" EnableImmediatePosting="True" >
</tsWPF:tsTableView>
</tsWPF:tsGridControl.View>
<dxg:GridColumn FieldName="idProducto" Header="Producto" Width="400">
<dxg:GridColumn.EditSettings>
<dxe:ComboBoxEditSettings x:Name="cbProducto" ValueMember="idProducto" DisplayMember="Descripcion" AllowDefaultButton="False" AutoComplete="True">
<dxe:ComboBoxEditSettings.Buttons>
<dxe:ButtonInfo x:Name="biBuscarProducto" GlyphKind="Search" IsDefaultButton="False" Click="BiBuscarProducto_Click" />
</dxe:ComboBoxEditSettings.Buttons>
</dxe:ComboBoxEditSettings>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Cantidad" Header="Cantidad" IsSmart="True" Width="70">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings MaskType="Numeric" Mask="n0" MaskUseAsDisplayFormat="True" HorizontalContentAlignment="Right" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Precio" IsSmart="True" Width="70">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings MaskType="Numeric" Mask="c4" MaskUseAsDisplayFormat="True" HorizontalContentAlignment="Right" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<tsWPF:tsGridColumn FieldName="Importe" IsSmart="True" Width="80" SoloLectura="True">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings MaskType="Numeric" Mask="c4" MaskUseAsDisplayFormat="True" HorizontalContentAlignment="Right" />
</dxg:GridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="idTipoIva" Header="% IVA" IsSmart="True" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:ComboBoxEditSettings x:Name="cbIva" ValueMember="idEnumeracion" DisplayMember="Descripcion" AllowDefaultButton="False" AutoComplete="True" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="Observaciones" Header="Observaciones" IsSmart="True" Width="380" />
</tsWPF:tsGridControl>
</dxlc:LayoutGroup>
</dx:DXTabItem>
<dx:DXTabItem Header="Pagos">
<dxlc:LayoutGroup Orientation="Vertical">
<dxlc:LayoutGroup Orientation="Vertical" Header="Recibos" View="GroupBox">
<tsWPF:tsGridControl TabIndex="29" x:Name="gcRecibos" NombreTablaBase="movimientoscaja">
<tsWPF:tsGridControl.View>
<tsWPF:tsTableView ShowTotalSummary="False" ShowGroupPanel="False" x:Name="tvRecibos" NewItemRowPosition="Bottom" AutoWidth="False" AllowGrouping="False" TabIndex="15" />
</tsWPF:tsGridControl.View>
<tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="True" />
</tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:tsGridControl.PropiedadesTSGC>
<tsWPF:PropiedadesTSGC CamposObligatorios="Fecha,FechaCreacion,idCaja" />
</tsWPF:tsGridControl.PropiedadesTSGC>
<tsWPF:tsGridControl.Columns>
<dxg:GridColumn FieldName="ImporteNegativo" Width="150" Header="Importe">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings MaskUseAsDisplayFormat="True" MaskType="Numeric" Mask="c2" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn Width="150" Header="Fecha Pago" FieldName="Fecha" SortOrder="Ascending" SortIndex="0" />
<tsWPF:tsGridColumn Width="250" Header="Caja" FieldName="idCaja">
<tsWPF:tsGridColumn.EditSettings>
<dxe:ComboBoxEditSettings ValueMember="idCaja" PopupWidth="600" x:Name="cbCaja" IncrementalFiltering="True" DisplayMember="Descripcion" AutoComplete="True" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<dxg:GridColumn FieldName="Observaciones" Header="Observaciones" Width="350" />
<tsWPF:tsGridColumn Width="120" IsSmart="True" Header="Fecha Creación" FieldName="FechaCreacion" SoloLectura="True" />
<tsWPF:tsGridColumn Width="90" Header="Nº Pago" HorizontalHeaderContentAlignment="Center" FieldName="idMovimiento" SoloLectura="True" />
</tsWPF:tsGridControl.Columns>
</tsWPF:tsGridControl>
</dxlc:LayoutGroup>
</dxlc:LayoutGroup>
</dx:DXTabItem>
<dx:DXTabItem Header="Documentos" Height="22" VerticalAlignment="Top">
<tsWPF:tsGridControl x:Name="gcDocumentos" NombreTablaBase="documentosfacturasrecibidas" TabIndex="24">
<tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="True" />
</tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:tsGridControl.View>
<tsWPF:tsTableView x:Name="tvDocumentos" ShowTotalSummary="False" AllowGrouping="False" ShowGroupPanel="False" AutoWidth="False" NewItemRowPosition="Bottom" PreviewKeyDown="tvDocumentos_PreviewKeyDown" />
</tsWPF:tsGridControl.View>
<dxg:GridColumn FieldName="Descripcion" Header="Descripción" Width="500">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings TextWrapping="Wrap" AcceptsReturn="True" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<tsWPF:tsGridColumn Width="250" Header="Tipo" FieldName="Tipo">
<tsWPF:tsGridColumn.EditSettings>
<dxe:ComboBoxEditSettings ValueMember="Valor" PopupWidth="600" x:Name="cbTipoDocumento" IncrementalFiltering="True" DisplayMember="Descripcion" AutoComplete="True" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="idFicheroNavigation.NombreFichero" Header="Fichero" Width="300" x:Name="gcNombreFichero">
<dxg:GridColumn.EditSettings>
<dxe:ButtonEditSettings x:Name="btFichero" IsTextEditable="False">
<dxe:ButtonEditSettings.Buttons>
<dxe:ButtonInfo GlyphKind="Search" Click="VerDocumento" />
</dxe:ButtonEditSettings.Buttons>
</dxe:ButtonEditSettings>
</dxg:GridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="Fecha" Header="Fecha" Width="140" SoloLectura="True">
<dxg:GridColumn.EditSettings>
<dxe:DateEditSettings DisplayFormat="dd/MM/yyyy HH:mm" />
</dxg:GridColumn.EditSettings>
</tsWPF:tsGridColumn>
</tsWPF:tsGridControl>
</dx:DXTabItem>
<dx:DXTabItem Header="Registro de cambios">
<dxlc:LayoutGroup Orientation="Vertical">
<tsWPF:tsGridControl x:Name="gcLogs" TabIndex="21">
<tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsGridControl.PropiedadesTS>
<dxg:GridControl.View>
<tsWPF:tsTableView x:Name="tvLogs" ShowSearchPanelMode="Default" ShowGroupPanel="False" />
</dxg:GridControl.View>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="idLog" Header="Nº Cambio" IsSmart="True" CellTemplate="{DynamicResource VerDetalleTemplate}" />
<dxg:GridColumn FieldName="FechaHora" Header="Fecha Hora Cambio">
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings MaskType="DateTime" MaskUseAsDisplayFormat="True" Mask="dd/MM/yyyy HH:mm" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="Usuario" Header="Usuario" Width="250" IsSmart="True" />
<dxg:GridColumn FieldName="ip" Header="Dirección IP" IsSmart="True" Width="150" />
</dxg:GridControl.Columns>
</tsWPF:tsGridControl>
</dxlc:LayoutGroup>
</dx:DXTabItem>
<!--<dx:DXTabItem Header="Registro de cambios" >
<dxlc:LayoutGroup Orientation="Vertical">
<tsWPF:tsGridControl x:Name="gcLogs" TabIndex="21" >
<tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable"/>
</tsWPF:tsGridControl.PropiedadesTS>
<dxg:GridControl.View >
<tsWPF:tsTableView x:Name="tvLogs" ShowSearchPanelMode="Default" ShowGroupPanel="False" />
</dxg:GridControl.View>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="idLog" Header="Nº Cambio" IsSmart="True" CellTemplate="{DynamicResource VerDetalleTemplate}" />
<dxg:GridColumn FieldName="FechaHora" Header="Fecha Hora Cambio" >
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings MaskType="DateTime" MaskUseAsDisplayFormat="True" Mask="dd/MM/yyyy HH:mm" />
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
<dxg:GridColumn FieldName="usuarios.Nombre" Header="Usuario" Width="250" IsSmart="True" />
<dxg:GridColumn FieldName="ip" Header="Dirección IP" IsSmart="True" Width="150" />
</dxg:GridControl.Columns>
</tsWPF:tsGridControl>
</dxlc:LayoutGroup>
</dx:DXTabItem>-->
</dx:DXTabControl>
<dxlc:LayoutGroup View="GroupBox" x:Name="lgTotalesClase" IsCollapsible="True" IsLocked="True" Height="Auto" HorizontalAlignment="Stretch" Header="Totales">
<dxlc:LayoutGroup Orientation="Vertical" HorizontalAlignment="Left" Width="150">
<tsWPF:tsLayoutItem Label="% I.V.A. 1:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="16" HorizontalAlignment="Stretch" EditValue="{Binding PorcentajeIVA1, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="% I.V.A. 2:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="19" HorizontalAlignment="Stretch" EditValue="{Binding PorcentajeIVA2, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="% I.V.A. 3:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="22" HorizontalAlignment="Stretch" EditValue="{Binding PorcentajeIVA3, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Vertical" HorizontalAlignment="Left" Width="230">
<tsWPF:tsLayoutItem Label="Base Imponible 1:" >
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="17" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" EditValue="{Binding BaseImponible1, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teBI1" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Base Imponible 2:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="20" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" EditValue="{Binding BaseImponible2, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teBI2" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Base Imponible 3:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="23" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" EditValue="{Binding BaseImponible3, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teBI3" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Base Imponible Exenta:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="23" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" EditValue="{Binding BaseImponibleExenta, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Vertical" HorizontalAlignment="Left" Width="180">
<tsWPF:tsLayoutItem Label="Importe IVA 1:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="18" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" EditValue="{Binding CuotaIVA1, Mode=TwoWay , NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teCuotaIVA1" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Importe IVA 2:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="21" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" EditValue="{Binding CuotaIVA2, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teCuotaIVA2"/>
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Importe IVA 3:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="24" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" EditValueType="{x:Type sys:Double}" EditValue="{Binding CuotaIVA3, Mode=TwoWay , NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" x:Name="teCuotaIVA3" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Vertical" Width="250" HorizontalAlignment="Left">
<tsWPF:tsLayoutItem Label="Total Base Imponible:" FontWeight="SemiBold">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="25" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" FontWeight="Bold" EditValue="{Binding TotalBaseImponible, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Total IVA:" FontWeight="SemiBold">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="27" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" FontWeight="Bold" EditValue="{Binding TotalIVA, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Vertical" Width="200" HorizontalAlignment="Left">
<tsWPF:tsLayoutItem Label="% I.R.P.F:" FontWeight="SemiBold">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="26" Mask="N0" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" FontWeight="Bold" EditValue="{Binding PorcentajeIRPF, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Cuota I.R.P.F.:" FontWeight="SemiBold">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="28" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" FontWeight="Bold" EditValue="{Binding IRPF, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Vertical" Width="270" HorizontalAlignment="Left">
<tsWPF:tsLayoutItem Label="Total Factura:" FontWeight="Bold">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="29" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" FontWeight="Bold" EditValue="{Binding TotalFactura, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem FontWeight="Bold" Label="Importe Pagado:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="30" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" FontWeight="Bold" EditValue="{Binding ImportePagado, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem FontWeight="Bold" Label="Pendiente Pago:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" UsualCorreccion="False" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit TabIndex="31" Mask="c2" MaskType="Numeric" MaskUseAsDisplayFormat="True" IsReadOnly="True" FontWeight="Bold" EditValue="{Binding ImportePendiente, Mode=OneWay, NotifyOnSourceUpdated=True, NotifyOnValidationError=true, ValidatesOnExceptions=true}" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
</dxlc:LayoutGroup>
</dxlc:LayoutControl>
</Grid>
</tsWPF:tsUserControl>

View File

@@ -0,0 +1,683 @@
Imports DevExpress.Xpf.Editors
Imports DevExpress.Xpf.LayoutControl
Imports tsWPFCore
Imports System.ComponentModel
Imports System.Data
Imports DevExpress.Xpf.Editors.Validation
Imports DevExpress.Xpf.Editors.Helpers
Imports DevExpress.Xpf.Core
Imports tsWPFCore.modExtensiones
Imports System.Data.Common
Imports bdGrupoSanchoToro.db
Imports tsUtilidades.Datos
Imports DevExpress.Xpf.Bars
Imports DevExpress.Xpf.Grid
Imports System.Collections
Imports tsEFCore8.Extensiones
Imports bdGrupoSanchoToro.db.Utilidades
Imports tsUtilidades.Enumeraciones
Imports tsUtilidades
Imports bdGrupoSanchoToro.db.productos
Imports System.IO
Imports Microsoft.Win32
Imports tsUtilidades.Extensiones
'TODO: Comprobar cuando se puede modificar una factura (o eliminar)
Public Class ucFacturaRecibida
Private bd As tscGrupoSanchoToro
Friend _idFactura As Nullable(Of Integer)
Private lProductos As List(Of productos)
Private ivas As List(Of enumeraciones)
Friend idLog As Integer?
Dim ra As facturasrecibidas
Public Overrides Sub Cargado()
Me.Tipo_ucControlBusqueda = GetType(ucFacturasRecibidas)
End Sub
Public Overrides Sub EstableceDataContextSecundarios(Optional Background As Boolean = False)
Try
lProductos = bd.productos.OrderBy(Function(x) x.Descripcion).ToList
Dim lProductosFra = ra.detallesfacturasrecibidas.Select(Function(x) x.idProducto).ToArray
lProductos = lProductos.Where(Function(x) x.FechaBaja Is Nothing OrElse lProductosFra.Contains(x.idProducto)).ToList
cbProducto.ItemsSource = lProductos
'For Each d In ra.detallesfacturasrecibidas
' If Not ivas.Contains(d.PorcentajeIVA) Then ivas.Add(d.PorcentajeIVA)
'Next
cbIva.ItemsSource = ivas
cbTipoDocumento.ItemsSource = tsUtilidades.DescripcionValor.EnumADescripcionValor(GetType(bdGrupoSanchoToro.db.documentosfacturasrecibidas.TipoDocumentoFacturaEnum)).OrderBy(Function(x) x.Descripcion)
cbCategoria.ItemsSource = bd.enumeraciones.Where(Function(x) x.idGrupoEnumeracionNavigation.Grupo = "CATFR").OrderBy(Function(x) x.Descripcion).ToList
Dim plantillas As List(Of tsWPFCore.Plantilla) = Comun.ObtienePlantillas(bd, {"GRUPLA.FACREC"}, False)
Me.ContenedorAplicacion.cbPlantillaAImprimir.ItemsSource = plantillas
If plantillas.Count > 0 Then
Me.ContenedorAplicacion.bePlantilla.EditValue = plantillas.First.idPlantilla
End If
Catch ex As Exception
Throw New Exception(ex.Message, ex)
End Try
End Sub
Public Overrides Function EstablecedcPrincipal(Optional Background As Boolean = False, Optional FuerzaNuevo As Boolean = False, Optional Refrescar As Boolean = False) As tsUtilidades.EstadosAplicacion
Dim NuevoEstado As tsUtilidades.EstadosAplicacion
ivas = bd.enumeraciones.Where(Function(x) x.idGrupoEnumeracionNavigation.Grupo = "PIVA").OrderBy(Function(x) x.ValorNumerico2).ToList
If idLog.HasValue Then
Try
Dim log = bd.logs.First(Function(x) x.idLog = idLog)
ra = tsUtilidades.Utilidades.DeserializarSinErrores(log.Log, GetType(facturasrecibidas))
If ra.idUsuario.HasValue Then ra.idUsuarioNavigation = bd.usuarios.FirstOrDefault(Function(x) x.idUsuario = ra.idUsuario.Value)
Dim df = bd.logs.FirstOrDefault(Function(x) x.idRelacionado = log.idLog AndAlso x.Aplicacion = "DETALLESFACTURASRECIBIDAS")
If df IsNot Nothing Then
Dim ld = tsUtilidades.Utilidades.DeserializarSinErrores(df.Log, GetType(List(Of detallesfacturasrecibidas)))
For Each d In ld
ra.detallesfacturasrecibidas.Add(d)
Next
End If
Dim mv = bd.logs.FirstOrDefault(Function(x) x.idRelacionado = log.idLog AndAlso x.Aplicacion = "MOVIMIENTOSCAJA_FR")
If mv IsNot Nothing Then
Dim ld = tsUtilidades.Utilidades.DeserializarSinErrores(mv.Log, GetType(List(Of movimientoscaja)))
For Each d In ld
ra.movimientoscaja.Add(d)
Next
End If
Dim lent = bd.logs.FirstOrDefault(Function(x) x.idRelacionado = log.idLog AndAlso x.Aplicacion = "ENTIDADES")
If lent IsNot Nothing Then
Dim ent = tsUtilidades.Utilidades.DeserializarSinErrores(lent.Log, GetType(entidades))
ra.idProveedorNavigation = ent
lgDatosProveedor.DataContext = ra.idProveedorNavigation
End If
Dim lfic = bd.logs.FirstOrDefault(Function(x) x.idRelacionado = log.idLog AndAlso x.Aplicacion = "FICHEROS")
If lfic IsNot Nothing Then
Dim fic = tsUtilidades.Utilidades.DeserializarSinErrores(lfic.Log, GetType(db.ficheros))
ra.idFicheroNavigation = fic
End If
NuevoEstado = tsUtilidades.EstadosAplicacion.ModificandoRegistro
Catch EX As Exception
Throw New Exception("No ha sido posible mostrar el registro del cambio (id " & idLog.Value.ToString & ").", EX)
End Try
Else
If FuerzaNuevo OrElse _idFactura Is Nothing Then
ra = New facturasrecibidas
ra.FechaFactura = DateOnly.FromDateTime(Today)
_idFactura = Nothing
ra.FechaRegistro = DateOnly.FromDateTime(Today)
NuevoEstado = tsUtilidades.EstadosAplicacion.Nuevo
lgDatosProveedor.DataContext = ra.idProveedorNavigation
Else
ra = bd.facturasrecibidas.First(Function(x) x.idFactura = _idFactura)
NuevoEstado = tsUtilidades.EstadosAplicacion.ModificandoRegistro
lgDatosProveedor.DataContext = ra.idProveedorNavigation
End If
End If
cbIVA.ItemsSource = ivas
Dim lCajas = bd.cajas.Where(Function(x) x.idEmpresa = EmpresaActual.idEmpresa).ToList.Where(Function(x) (x.FechaBaja.HasValue = False OrElse ra.movimientoscaja.Any(Function(y) y.idCaja = x.idCaja))).OrderBy(Function(x) x.Descripcion).ToList
Me.cbCaja.ItemsSource = lCajas
cbRazonSocial.ItemsSource = bd.entidades.Where(Function(x) x.idEmpresa = EmpresaActual.idEmpresa AndAlso ((x.EsProveedor AndAlso x.FechaBaja.HasValue = False) OrElse x.idEntidad = ra.idProveedor)).ToList
gcDetalle.ItemsSource = ra.detallesfacturasrecibidas
gcRecibos.ItemsSource = ra.movimientoscaja
gcDocumentos.ItemsSource = ra.documentosfacturasrecibidas
Me.gcLogs.ItemsSource = bd.logs.Where(Function(x) x.id = ra.idFactura AndAlso x.Aplicacion = "FACTURASRECIBIDAS").ToList
'Dim Acciones As New List(Of tsWPFCore.Accion)
'Acciones.Add(New Accion With {
' .idAccion = 1,
' .Descripcion = "AGREGAR PRODUCTOS PENDIENTES DE FACTURAR"})
'Acciones.Add(New Accion With {
' .idAccion = 2,
' .Descripcion = "SALDAR FACTURA POR CAJA CONTADO"})
'Acciones.Add(New Accion With {
' .idAccion = 3,
' .Descripcion = "SALDAR FACTURA POR TPV"})
'Acciones.Add(New Accion With {
' .idAccion = 4,
' .Descripcion = "SALDAR FACTURA POR BANCO"})
'Me.ContenedorAplicacion.cbAcciones.ItemsSource = Acciones
'Me.ContenedorAplicacion.beAcciones.EditValue = Acciones.First.idAccion
Me.DataContext = ra
Return NuevoEstado
End Function
Public Overrides Function ObtieneBD() As tsUtilidades.ItsContexto
bd = tscGrupoSanchoToro.NuevoContexto
Return bd
End Function
Public Overrides ReadOnly Property NombreTablaBase As String
Get
Return "facturasrecibidas"
End Get
End Property
'Public Overrides ReadOnly Property CampoIndice As String
' Get
' Return "idFactura"
' End Get
'End Property
Public Overrides ReadOnly Property idRegistroAplicacionActual As String
Get
If idLog.HasValue Then
Return "Gastos / Factura Proveedor R.C.:" & idLog.ToString
Else
If Me.Estado = tsUtilidades.EstadosAplicacion.Nuevo Then
Return "Gastos / Factura Proveedor.Nuevo"
Else
Return "Gastos / Factura Proveedor." & DirectCast(Me.DataContext, facturasrecibidas).idFactura.ToString
End If
End If
End Get
End Property
Public Overrides ReadOnly Property DescripcionRegistro As String
Get
Return "Gastos / Factura Proveedor"
End Get
End Property
Public Sub New(Optional idFactura As Integer? = Nothing)
' Llamada necesaria para el diseñador.
InitializeComponent()
_idFactura = idFactura
' Agregue cualquier inicialización después de la llamada a InitializeComponent().
End Sub
Public Overrides Sub EstableceTitulo()
If idLog.HasValue Then
Dim fr As facturasrecibidas = Me.DataContext
Me.docpanel.Caption = "R.C. Gastos / Factura de Proveedor " & fr.NumeroFactura
Me.docpanel.Tag = "R.C. Gastos / Factura Recibida." & fr.NumeroFactura
Else
If Me.Estado = tsUtilidades.EstadosAplicacion.ModificandoRegistro Then
Dim fr As facturasrecibidas = Me.DataContext
Me.docpanel.Caption = " Gastos / Factura de Proveedor " & fr.NumeroFactura
Me.docpanel.Tag = " Gastos / Factura Recibida." & fr.NumeroFactura
Else
Me.docpanel.Caption = " Gastos / Factura de Proveedor Nueva"
Me.docpanel.Tag = " Gastos / FacturaRecibida.Nuevo"
End If
End If
' End If
'End If
End Sub
Public Overrides Function ObtienePermisos() As tsUtilidades.Permisos
Dim pers = Comun.ObtienePermisos(Me.bd, "AP.ADMINISTRATIVOS", idUsuario)
' pers.Eliminar = False
Return pers
End Function
Private Sub ap_ValidarControl(sender As Object, e As ValidationEventArgs, ByRef ev As ErrorValidacion, ByRef ValorOriginalCambiado As Object) Handles Me.ValidarControl
Dim pts As PropiedadesTS = sender.parent.propiedadests
Try
If Not pts Is Nothing Then
Me.ErroresValidacion.EliminaError("validando-" & pts.NombreCampo)
Dim ra As facturasrecibidas = Me.DataContext
Select Case pts.NombreCampo.ToLower
Case "idproveedor_nulable"
Dim id As Integer = e.Value
Dim ent = bd.entidades.First(Function(x) x.idEntidad = id)
lgDatosProveedor.DataContext = ent
End Select
End If
Catch ex As Exception
Dim sCodigoError As String = "validando-"
If pts IsNot Nothing Then
sCodigoError &= pts.NombreCampo
End If
ev = New ErrorValidacion(sCodigoError, sender, ex.Message, ex, DevExpress.XtraEditors.DXErrorProvider.ErrorType.Critical)
e.IsValid = False
End Try
End Sub
Private Sub ap_DespuesGuardar(sender As Object, e As ItemClickEventArgs, OpcionGuardado As Integer) Handles Me.DespuesGuardar
_idFactura = ra.idFactura
RefrescaUC()
' Me.gcRecibos.ItemsSource = ra.movimientoscaja
' Me.gcLogs.ItemsSource = bd.logs.Where(Function(x) x.id = ra.idFactura AndAlso x.Aplicacion = "FACTURASRECIBIDAS").ToList
End Sub
Private Sub ap_Enlazar(Celda As EditGridCellData, Defecto As Boolean) Handles Me.Enlazar
Dim ra As facturasrecibidas = Me.DataContext
Select Case Celda.Column.FieldName.ToLower
Case "idlog"
Dim log As logs = gcLogs.CurrentItem
Dim id As Integer = log.idLog
Dim uc As New ucFacturaRecibida
uc.idLog = log.idLog
FuncionesDinamicas.AbrirAP(uc, OtrosParametros)
End Select
'Select Case Celda.Column.FieldName.ToLower
' Case "numeroalbaranentrega"
' Dim ra = DirectCast(Me.gcDetalle.CurrentItem, detallesfacturasrecibidas)
' Dim id As Integer = ra.detallesalbaranes.idAlbaranEntrega
' FuncionesDinamicas.AbrirAP(New ucAlbaranEntrega(id), OtrosParametros)
' Case "numeroalbaranrecogida"
' Dim ra = DirectCast(Me.gcDetalle.CurrentItem, detallesfacturasrecibidas)
' Dim id As Integer = ra.detallesalbaranes.idAlbaranRecogida
' FuncionesDinamicas.AbrirAP(New ucAlbaranRecogida(id), OtrosParametros)
'End Select
End Sub
Private Sub ap_EstadoCambiado(EstadoAnterior As tsUtilidades.EstadosAplicacion, EstadoNuevo As tsUtilidades.EstadosAplicacion) Handles Me.EstadoCambiado
Select Case EstadoNuevo
Case EstadosAplicacion.ModificandoRegistro
Dim ra As facturasrecibidas = Me.DataContext
' Dim ra As albaranesrecogida = Me.DataContext
' If ra.detallesfacturasrecibidas.ToList.Any(Function(x) x.idAlbaranRecogida.HasValue OrElse (x.idUltimaFactura.HasValue AndAlso (x.facturasrecibidas.Fecha > ra.Fecha.Date))) Then me.EstableceSoloLectura()
End Select
If idLog.HasValue Then EstableceSoloLectura()
EstableceSoloLecturaCI()
End Sub
Private Sub BiBuscarProducto_Click(sender As Object, e As RoutedEventArgs)
'Dim dxw As New dxwProductos(lProductos)
'If dxw.ShowDialog Then
' If gcDetalle.CurrentItem Is Nothing Then tvDetalle.AddNewRow()
' Dim def As detallesfacturasrecibidas = gcDetalle.CurrentItem
' Dim prod = lProductos.First(Function(x) x.idProducto = dxw.idProducto)
' def.idProducto = prod.idProducto
' RellenaDatosProducto(def)
' tvDetalle.MoveNextCell()
' gcDetalle.RefreshRow(tvDetalle.FocusedRowHandle)
'End If
If tvDetalle.ActiveEditor Is Nothing Then
Dispatcher.BeginInvoke(New Action(Sub() tvDetalle.ShowEditor()), System.Windows.Threading.DispatcherPriority.Render)
End If
Dim dxw As New dxwProductos(lProductos)
If dxw.ShowDialog Then
If gcDetalle.CurrentItem Is Nothing Then tvDetalle.AddNewRow()
Dim def As detallesfacturasrecibidas = gcDetalle.CurrentItem
Dim prod = lProductos.First(Function(x) x.idProducto = dxw.idProducto)
def.idProducto = prod.idProducto
If tvDetalle.ActiveEditor IsNot Nothing Then tvDetalle.ActiveEditor.EditValue = prod.idProducto
tvDetalle.PostEditor()
tvDetalle.CloseEditor()
gcDetalle.RefreshRow(tvDetalle.FocusedRowHandle)
End If
End Sub
Private Sub ap_AntesGuardar(sender As Object, e As ItemClickEventArgs, ByRef Cancelar As Boolean, ByRef MensajesError As Hashtable, OpcionGuardado As Integer) Handles Me.AntesGuardar
ra.idUsuario = idUsuario
Dim hte As New Hashtable
If ra.detallesfacturasrecibidas.Count = 0 Then
hte.Add("ALMACENAR-DETALLE_OBLIGATORIO", "Es obligatorio introducir al menos un artículo")
End If
If bd.facturasrecibidas.Any(Function(x) x.NumeroFactura = ra.NumeroFactura AndAlso x.idProveedor = ra.idProveedor AndAlso x.idFactura <> ra.idFactura) Then
hte.Add("ALMACENAR-YA-EXISTE-OTRA-FACTURA", "Ya existe esta factura del mismo cliente registrada")
End If
If ra.TotalFactura = 0 Then
hte.Add("ALMACENAR-IMPORTE_0", "El total de la factura no puede ser 0")
End If
If Math.Abs(ra.ImportePagado) > Math.Abs(ra.TotalFactura) Then
hte.Add("ALMACENAR-IMPORTE_PAGADO_SUPERIOR", "El importe pagado de los recibos no puede superar al total de la factura")
End If
If hte.Count > 0 Then
MensajesError = hte
Cancelar = True
Else
For Each mv In ra.movimientoscaja
mv.Tipo = TipoMovimientoEnum.RECIBO_PROVEEDOR
If mv.idUsuario.HasValue = False Then mv.idUsuario = idUsuario
Next
For Each d In ra.documentosfacturasrecibidas
If d.idUsuario.HasValue = False Then d.idUsuario = idUsuario
Next
If ra.ImportePendiente = 0 Then
ra.FechaPago = DateOnly.FromDateTime(ra.movimientoscaja.OrderByDescending(Function(x) x.Fecha).First.Fecha)
Else
ra.FechaPago = Nothing
End If
If ra.PorcentajeIVA2.HasValue = False Then
ra.BaseImponible2 = Nothing
ra.CuotaIVA2 = Nothing
End If
If ra.PorcentajeIVA3.HasValue = False Then
ra.BaseImponible3 = Nothing
ra.CuotaIVA3 = Nothing
End If
End If
End Sub
Private Sub tvDetalle_CellValueChanged(sender As Object, e As CellValueChangedEventArgs) Handles tvDetalle.CellValueChanged
Try
Dim def As detallesfacturasrecibidas = e.Row
Select Case e.Column.FieldName.ToLower
Case "idproducto"
RellenaDatosProducto(def)
'Case "cantidad", "precio"
' def.RefrescaImporte()
Case "idtipoiva"
Dim idTIVA = CInt(e.Value)
def.PorcentajeIVA = ivas.First(Function(x) x.idEnumeracion = idTIVA).ValorNumerico1
End Select
Catch ex As Exception
End Try
End Sub
Private Sub RellenaDatosProducto(dea As detallesfacturasrecibidas)
Dim ae As facturasrecibidas = Me.DataContext
Dim pr = lProductos.First(Function(x) x.idProducto = dea.idProducto)
dea.Precio = pr.UltimoPrecioCompra
If dea.Cantidad = 0 Then dea.Cantidad = 1
'dea.RefrescaImporte()
End Sub
Private Sub BiBuscarProveedor_Click(sender As Object, e As RoutedEventArgs)
If Me.ContenedorAplicacion.btGuardar.IsEnabled Then
Dim dxw As New dxwEntidades(bd, False, True)
If dxw.ShowDialog Then
Dim ra As facturasrecibidas = Me.DataContext
Dim ent = bd.entidades.First(Function(x) x.idEntidad = dxw.Entidad.idEntidad)
ra.idProveedorNavigation = ent
ra.idProveedor_Nulable = ent.idEntidad
lgDatosProveedor.DataContext = ent
End If
End If
End Sub
Private Sub ap_ImprimirPlantilla(sender As Object, e As ItemClickEventArgs, idPlantilla As Integer) Handles Me.ImprimirPlantilla
Imprimir(idPlantilla, False, 1)
End Sub
Private Sub Imprimir(idPlantilla As Integer, ImpresoraDefecto As Boolean, Copias As Integer)
Dim ds As List(Of facturasrecibidas)
Dim pl = bd.plantillas.AsNoTracking.Where(Function(x) x.idPlantilla = idPlantilla).Select(Function(x) New With {.Fichero = x.idFicheroNavigation.Fichero, .Tipo = x.idGrupoNavigation.Codigo}).FirstOrDefault
ds = New List(Of facturasrecibidas)
ds.Add(ra)
Informes.ImprimirPlantilla(bd, pl.Fichero, ds, ImpresoraDefecto, Copias)
End Sub
'Private Sub ap_EjecutarAccion(sender As Object, e As ItemClickEventArgs, idAccion As Integer) Handles Me.EjecutarAccion
'End Sub
Private Sub tvDetalle_RowUpdated(sender As Object, e As DevExpress.Xpf.Grid.RowEventArgs) Handles tvDetalle.RowUpdated
Call CalculaTotales()
End Sub
Sub CalculaTotales()
Dim ra As facturasrecibidas = Me.DataContext
Dim ivas(2) As Double?
For Each df In ra.detallesfacturasrecibidas.Where(Function(x) x.PorcentajeIVA.HasValue).ToList
For i = 0 To 3
If i = 3 Then Throw New Exception("Demasiados tipos de iva en la misma factura.")
If ivas(i).HasValue = False OrElse ivas(i).Value = df.PorcentajeIVA Then
ivas(i) = df.PorcentajeIVA
Exit For
End If
Next
Next
ra.PorcentajeIVA1 = ivas(0)
ra.PorcentajeIVA2 = ivas(1)
ra.PorcentajeIVA3 = ivas(2)
ra.BaseImponibleExenta = ra.detallesfacturasrecibidas.Where(Function(x) x.PorcentajeIVA.HasValue = False).Sum(Function(x) x.Importe)
ra.BaseImponible1 = Nothing
ra.BaseImponible2 = Nothing
ra.BaseImponible3 = Nothing
If ivas(0).HasValue Then ra.BaseImponible1 = ra.detallesfacturasrecibidas.Where(Function(x) x.PorcentajeIVA.HasValue AndAlso x.PorcentajeIVA = ivas(0)).Sum(Function(x) x.Importe)
If ivas(1).HasValue Then ra.BaseImponible2 = ra.detallesfacturasrecibidas.Where(Function(x) x.PorcentajeIVA.HasValue AndAlso x.PorcentajeIVA = ivas(1)).Sum(Function(x) x.Importe)
If ivas(2).HasValue Then ra.BaseImponible3 = ra.detallesfacturasrecibidas.Where(Function(x) x.PorcentajeIVA.HasValue AndAlso x.PorcentajeIVA = ivas(2)).Sum(Function(x) x.Importe)
'ra.BaseImponible2 = If(ivas(2).HasValue, ra.detallesfacturasrecibidas.Where(Function(x) x.PorcentajeIVA = ivas(1)).Sum(Function(x) x.Importe), 0)
'ra.BaseImponible3 = If(ivas(2).HasValue, ra.detallesfacturasrecibidas.Where(Function(x) x.PorcentajeIVA = ivas(2)).Sum(Function(x) x.Importe), 0)
ra.TotalBaseImponible = Math.Round(ra.detallesfacturasrecibidas.Sum(Function(x) x.Importe), 2)
CalculaIRPF(ra)
CalculaCuotasIVA(ra)
CalculaTotalesFinales(ra)
End Sub
Public Sub CalculaIRPF(F As facturasrecibidas)
F.IRPF = Math.Round(F.TotalBaseImponible * F.PorcentajeIRPF / 100, 2, MidpointRounding.AwayFromZero)
End Sub
Public Sub CalculaCuotasIVA(F As facturasrecibidas)
F.CuotaIVA1 = Nothing
F.CuotaIVA2 = Nothing
F.CuotaIVA3 = Nothing
If F.PorcentajeIVA1.HasValue Then
F.CuotaIVA1 = Math.Round(F.BaseImponible1.Value * F.PorcentajeIVA1.Value / 100, 2, MidpointRounding.AwayFromZero)
End If
If F.PorcentajeIVA2.HasValue Then
F.CuotaIVA2 = Math.Round(F.BaseImponible2.Value * F.PorcentajeIVA2.Value / 100, 2, MidpointRounding.AwayFromZero)
End If
If F.PorcentajeIVA3.HasValue Then
F.CuotaIVA3 = Math.Round(F.BaseImponible3.Value * F.PorcentajeIVA3.Value / 100, 2, MidpointRounding.AwayFromZero)
End If
End Sub
Public Sub CalculaTotalesFinales(ra As facturasrecibidas)
ra.TotalIVA = If(ra.CuotaIVA1.HasValue, ra.CuotaIVA1.Value, 0) + If(ra.CuotaIVA2.HasValue, ra.CuotaIVA2.Value, 0) + If(ra.CuotaIVA3.HasValue, ra.CuotaIVA3.Value, 0)
ra.TotalFactura = Math.Round(ra.TotalBaseImponible + ra.TotalIVA - ra.IRPF, 2, MidpointRounding.AwayFromZero)
ra.ImportePagado = Math.Round(ra.movimientoscaja.Sum(Function(x) x.ImporteNegativo), 2, MidpointRounding.AwayFromZero)
End Sub
Private Sub tvDetalle_ValidaFila(sender As Object, e As DevExpress.Xpf.Grid.GridRowValidationEventArgs) Handles tvDetalle.ValidateRow
'Dim df As detallesfacturasrecibidas = e.Row
'Dim htErrores = New Hashtable
'If df.Cantidad = 0 Then
' DXMessageBox.Show("La Cantidad no puede ser 0", "Error")
' e.SetError("La Cantidad no puede ser 0")
' e.IsValid = False
'End If
Try
Dim htErrores = New Hashtable
ErroresValidacion.LimpiarErrores("TSGC-" & gcDetalle.PropiedadesTS.NumeroObjeto.ToString & ":" & e.RowHandle.ToString & ":")
Dim df As detallesfacturasrecibidas = e.Row
If df.Cantidad = 0 Then
htErrores.Add("Cantidad0", "La Cantidad no puede ser 0")
End If
If htErrores.Count > 0 Then
Me.AgregaErroresTSGC(gcDetalle, htErrores, e)
End If
Catch ex As Exception
FuncionesDinamicas.ErrorNoControladoAp(Me, ex)
DXMessageBox.Show(ex.Message, "Error")
End Try
End Sub
Private Sub gcDetalle_DespuesEliminar(gc As tsGridControl) Handles gcDetalle.DespuesEliminar
CalculaTotales()
End Sub
Private Sub tvRecibos_ValidaFila(sender As Object, e As GridRowValidationEventArgs) Handles tvRecibos.ValidateRow
'Dim mv As movimientoscaja = e.Row
'If mv.Importe = 0 Then
' DXMessageBox.Show("El Importe no puede ser 0", "Error")
' e.SetError("El Importe no puede ser 0")
' e.IsValid = False
'End If
Try
Dim htErrores = New Hashtable
ErroresValidacion.LimpiarErrores("TSGC-" & gcRecibos.PropiedadesTS.NumeroObjeto.ToString & ":" & e.RowHandle.ToString & ":")
Dim mv As movimientoscaja = e.Row
If mv.Importe = 0 Then
htErrores.Add("Importe0", "El Importe no puede ser 0")
End If
If htErrores.Count > 0 Then
Me.AgregaErroresTSGC(gcRecibos, htErrores, e)
End If
Catch ex As Exception
FuncionesDinamicas.ErrorNoControladoAp(Me, ex)
DXMessageBox.Show(ex.Message, "Error")
End Try
End Sub
Private Sub gcRecibos_DespuesEliminar(gc As tsGridControl) Handles gcRecibos.DespuesEliminar
CalculaTotales()
End Sub
Private Sub tvRecibos_RowUpdated(sender As Object, e As RowEventArgs) Handles tvRecibos.RowUpdated
Dim ra As facturasrecibidas = Me.DataContext
CalculaTotalesFinales(ra)
End Sub
Private Sub tvRecibos_InitNewRow(sender As Object, e As InitNewRowEventArgs) Handles tvRecibos.InitNewRow
gcRecibos.SetCellValue(e.RowHandle, "Fecha", Now)
gcRecibos.SetCellValue(e.RowHandle, "FechaCreacion", Now)
End Sub
Private Sub ucFacturaRecibida_CampoActualizado(sender As Object, e As DataTransferEventArgs) Handles Me.CampoActualizado
Dim pts As PropiedadesTS = sender.parent.propiedadests
If Not pts Is Nothing Then
Dim ra As facturasrecibidas = Me.DataContext
Select Case pts.NombreCampo.ToLower
Case "porcentajeirpf"
CalculaIRPF(ra)
CalculaTotalesFinales(ra)
Case "cuotaiva1", "cuotaiva2", "cuotaiva3", "irpf"
CalculaTotalesFinales(ra)
Case "idproveedor_nulable"
ra.idProveedorNavigation = bd.entidades.First(Function(x) x.idEntidad = ra.idProveedor)
End Select
End If
End Sub
Private Sub tvDetalle_InitNewRow(sender As Object, e As InitNewRowEventArgs) Handles tvDetalle.InitNewRow
gcDetalle.SetCellValue(e.RowHandle, "idTipoIVA", ivas.OrderByDescending(Function(x) x.ValorNumerico1).First.idEnumeracion)
End Sub
Private Sub tvDetalle_PreviewKeyDown(sender As Object, e As Input.KeyEventArgs) Handles tvDetalle.PreviewKeyDown
If e.Key = Key.F6 Then
Select Case gcDetalle.CurrentColumn.FieldName.ToLower
Case "idproducto"
tvDetalle.ShowEditor()
BiBuscarProducto_Click(Nothing, Nothing)
End Select
End If
End Sub
Private Sub cbRazonSocial_PreviewKeyDown(sender As Object, e As Input.KeyEventArgs) Handles cbRazonSocial.PreviewKeyDown
If e.Key = Key.F6 Then
BiBuscarProveedor_Click(Nothing, Nothing)
End If
End Sub
Private Sub gcRecibos_AntesEliminar(gc As tsGridControl, ByRef Cancelar As Boolean) Handles gcRecibos.AntesEliminar
Dim da As movimientoscaja = gc.CurrentItem
If da.idMovimientoCierre.HasValue Then
DXMessageBox.Show("No se puede eliminar un pago ya que está cerrado")
Cancelar = True
End If
End Sub
Private Sub tvDocumentos_ValidateRow(sender As Object, e As GridRowValidationEventArgs) Handles tvDocumentos.ValidateRow
Dim ges As documentosfacturasrecibidas = gcDocumentos.CurrentItem
If ges.idUsuario.HasValue = False Then
ges.idUsuario = bdGrupoSanchoToro.db.Utilidades.idUsuario
End If
End Sub
Private Sub VerDocumento(sender As System.Object, e As System.Windows.RoutedEventArgs)
Try
Dim exp As documentosfacturasrecibidas = gcDocumentos.CurrentItem
If exp IsNot Nothing AndAlso exp.idFicheroNavigation IsNot Nothing AndAlso exp.idFicheroNavigation.NombreFichero IsNot Nothing AndAlso exp.idFicheroNavigation.Fichero IsNot Nothing Then
Dim sftmp As String = tsUtilidades.Utilidades.ObtieneDirectorioAleatorio("GrupoSanchoToro") & "\" & exp.idFicheroNavigation.NombreFichero
tsUtilidades.Utilidades.ByteArrayAFichero(exp.idFicheroNavigation.Fichero, sftmp, True)
tsUtilidades.Sistema.EjecutaFichero(sftmp)
End If
Catch ex As Exception
End Try
End Sub
Private Sub Examinar(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btFichero.DefaultButtonClick
Try
If gcDocumentos.CurrentItem Is Nothing Then tvDocumentos.AddNewRow()
Dim exp As documentosfacturasrecibidas = gcDocumentos.CurrentItem
Dim ofd As New OpenFileDialog
If ofd.ShowDialog() Then
Dim fin As New FileInfo(ofd.FileName)
If fin.Length > 1024 * 1024 * 50 Then
DXMessageBox.Show("El fichero no puede ser mayor de 50 Mb", "Atención")
Else
Dim f() As Byte = IO.File.ReadAllBytes(ofd.FileName)
Dim idTipoDocumentoExp = bd.enumeraciones.First(Function(x) x.Codigo = "TIPFIC.EXPENT").idEnumeracion
If exp.idFicheroNavigation Is Nothing Then
Dim fi As New db.ficheros
exp.idFicheroNavigation = fi
End If
exp.idFicheroNavigation.NombreFichero = IO.Path.GetFileName(ofd.FileName)
exp.idFicheroNavigation.Fichero = f
exp.idFicheroNavigation.Fecha = Now
exp.idFicheroNavigation.Descripcion = exp.Descripcion.Acortar(80)
exp.idFicheroNavigation.idTipo = idTipoDocumentoExp
exp.Fecha = Now
Dim usu = bd.usuarios.First(Function(x) x.idUsuario = bdGrupoSanchoToro.db.Utilidades.idUsuario)
exp.idUsuario = bdGrupoSanchoToro.db.Utilidades.idUsuario
exp.idUsuarioNavigation = usu
tvDocumentos.MoveNextCell()
gcDocumentos.RefreshRow(tvDocumentos.FocusedRowHandle)
End If
End If
Catch ex As Exception
DXMessageBox.Show(ex.Message, "Error")
End Try
End Sub
Private Sub tvDocumentos_PreviewKeyDown(sender As Object, e As KeyEventArgs)
If e.Key = Key.F6 AndAlso gcDocumentos.CurrentColumn.FieldName.ToLower = "ficheros.nombrefichero" Then
Examinar(Nothing, Nothing)
End If
End Sub
Private Sub tvDocumentos_InitNewRow(sender As Object, e As InitNewRowEventArgs) Handles tvDocumentos.InitNewRow
gcDocumentos.SetCellValue(e.RowHandle, "Fecha", Now)
End Sub
Private Sub teBI1_EditValueChanged(sender As Object, e As EditValueChangedEventArgs) Handles teBI1.EditValueChanged
EstableceSoloLectura(teCuotaIVA1, ra IsNot Nothing AndAlso ra.BaseImponible1.HasValue AndAlso ra.BaseImponible1.Value <> 0)
End Sub
Private Sub teBI2_EditValueChanged(sender As Object, e As EditValueChangedEventArgs) Handles teBI1.EditValueChanged
EstableceSoloLectura(teCuotaIVA2, ra IsNot Nothing AndAlso ra.BaseImponible2.HasValue AndAlso ra.BaseImponible2.Value <> 0)
End Sub
Private Sub teBI3_EditValueChanged(sender As Object, e As EditValueChangedEventArgs) Handles teBI1.EditValueChanged
EstableceSoloLectura(teCuotaIVA3, ra IsNot Nothing AndAlso ra.BaseImponible3.HasValue AndAlso ra.BaseImponible3.Value <> 0)
End Sub
Private Sub EstableceSoloLecturaCI()
EstableceSoloLectura(teCuotaIVA1, ra IsNot Nothing AndAlso ra.BaseImponible1.HasValue AndAlso ra.BaseImponible1.Value <> 0)
EstableceSoloLectura(teCuotaIVA2, ra IsNot Nothing AndAlso ra.BaseImponible2.HasValue AndAlso ra.BaseImponible2.Value <> 0)
EstableceSoloLectura(teCuotaIVA3, ra IsNot Nothing AndAlso ra.BaseImponible3.HasValue AndAlso ra.BaseImponible3.Value <> 0)
End Sub
End Class

View File

@@ -0,0 +1,196 @@
<tsWPF:tsUserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:tsWPF="clr-namespace:tsWPFCore;assembly=tsWPFCore" x:Class="ucFacturasRecibidas"
mc:Ignorable="d"
d:DesignHeight="768" d:DesignWidth="1366">
<tsWPF:tsUserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/tsWPFCore;component/Plantillas.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</tsWPF:tsUserControl.Resources>
<Grid>
<dxlc:LayoutControl Orientation="Vertical">
<dxlc:LayoutGroup View="GroupBox" Header="Búsqueda Rápida" Orientation="Vertical" x:Name="BusquedaRapida">
<dxlc:LayoutGroup Width="900" HorizontalAlignment="Left" >
<dxlc:LayoutGroup Orientation="Vertical">
<dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Fecha Inicio (Factura):" TabIndex="8" >
<dxe:DateEdit x:Name="teFechaInicio" TabIndex="2" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Fecha Fin (Factura):" TabIndex="1" >
<dxe:DateEdit x:Name="teFechaFin" TabIndex="3" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Mostar solo las no Enviadas a la Asesoría:" HorizontalAlignment="Left" HorizontalContentAlignment="Left" TabIndex="1" >
<dxe:CheckEdit x:Name="cbSoloPendientes" IsChecked="False" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Búsqueda:" FontWeight="Bold" >
<dxe:TextEdit x:Name="teBusqueda" TabIndex="0" FontWeight="Normal" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<Button Content="Buscar" Height="25" Width="100" x:Name="btBuscar" Click="BtBuscar_Click" IsDefault="True" TabIndex="1" />
</dxlc:LayoutGroup>
<dxlc:LayoutItem Label="Campos de búsqueda:">
<Border BorderThickness="1" BorderBrush="Black" >
<StackPanel Orientation="Horizontal" >
<TextBlock x:Name="tbCamposBusqueda" Text="Razón Social, NIF, Nº Factura, Obras"/>
<TextBlock Margin="20,0,0,0" Text="(En Blanco Muestra Todos)" FontWeight="Bold" ></TextBlock>
</StackPanel>
</Border>
</dxlc:LayoutItem>
</dxlc:LayoutGroup>
<tsWPF:tsGridControl x:Name="gc" TabIndex="1" >
<tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsGridControl.PropiedadesTS>
<tsWPF:tsGridControl.PropiedadesTSGC>
<tsWPF:PropiedadesTSGC />
</tsWPF:tsGridControl.PropiedadesTSGC>
<dxg:GridControl.Columns>
<tsWPF:tsGridColumn FieldName="idFactura" Width="120" IsSmart="True" Header="Nº Registro" CellTemplate="{DynamicResource VerDetalleTemplate}" Fixed="Left" />
<tsWPF:tsGridColumn FieldName="FechaRegistro" Header="Fecha Registro" IsSmart="True" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:DateEditSettings DisplayFormat="d"/>
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="NumeroFactura" Width="150" IsSmart="True" Header="Nº Factura Proveedor" />
<tsWPF:tsGridColumn FieldName="FechaFactura" Header="Fecha Factura" IsSmart="True" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:DateEditSettings DisplayFormat="d"/>
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="idProveedorNavigation.RazonSocial" Header="Razón Social" Width="300" IsSmart="True" CellTemplate="{DynamicResource VerDetalleTemplate}" />
<tsWPF:tsGridColumn FieldName="idProveedorNavigation.NIF" Header="N.I.F." Width="100" IsSmart="True" />
<tsWPF:tsGridColumn FieldName="BaseImponible1" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="PorcentajeIVA1" Header="% IVA 1" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="n0" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="CuotaIVA1" Header="IVA 1" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="BaseImponible2" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="PorcentajeIVA2" Header="% IVA 2" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="n0" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="CuotaIVA2" Header="IVA 2" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="BaseImponible3" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="PorcentajeIVA3" Header="% IVA 3" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="n0" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="CuotaIVA3" Header="IVA 3" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="PorcentajeIRPF" Header="% IRPF" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="n0" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="IRPF" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="TotalFactura" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="ImportePagado" HorizontalHeaderContentAlignment="Right" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="FechaPago" IsSmart="True" Width="100" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:DateEditSettings DisplayFormat="d"/>
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="ImportePendiente" HorizontalHeaderContentAlignment="Right" Width="120" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="idCategoriaNavigation.Descripcion" Width="150" IsSmart="True" Header="Categoría" />
<tsWPF:tsGridColumn FieldName="FechaEnvioAsesoria" Header="Fecha Envío Asesoría" IsSmart="True" Width="150" AllowPrinting="False" >
<dxg:GridColumn.EditSettings>
<dxe:TextEditSettings MaskType="DateTime" MaskUseAsDisplayFormat="True" Mask="dd/MM/yyyy HH:mm" />
</dxg:GridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="Observaciones" Width="400" IsSmart="True" AllowPrinting="False" />
<tsWPF:tsGridColumn FieldName="idUsuarioNavigation.Nombre" Header="Usuario" Width="150" IsSmart="True" AllowPrinting="False" />
<tsWPF:tsGridColumn FieldName="NumeroDocumentos" Header="Nº Docs. Adjuntos" HorizontalHeaderContentAlignment="Right" AllowPrinting="False" Width="120" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="N0" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<tsWPF:tsTableView x:Name="tv" ShowSearchPanelMode="Always" ShowGroupPanel="True" ShowTotalSummary="True" ShowGroupFooters="True" />
</dxg:GridControl.View>
<tsWPF:tsGridControl.TotalSummary>
<dxg:GridSummaryItem FieldName="TotalFactura" SummaryType="Sum" ShowInColumn="TotalFactura" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="BaseImponible1" SummaryType="Sum" ShowInColumn="BaseImponible1" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="BaseImponible2" SummaryType="Sum" ShowInColumn="BaseImponible2" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="BaseImponible3" SummaryType="Sum" ShowInColumn="BaseImponible3" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="CuotaIVA1" SummaryType="Sum" ShowInColumn="CuotaIVA1" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="CuotaIVA2" SummaryType="Sum" ShowInColumn="CuotaIVA2" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="CuotaIVA3" SummaryType="Sum" ShowInColumn="CuotaIVA3" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="ImportePagado" SummaryType="Sum" ShowInColumn="ImportePagado" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="ImportePendiente" SummaryType="Sum" ShowInColumn="ImportePendiente" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem SummaryType="Count" Alignment="Right" />
</tsWPF:tsGridControl.TotalSummary>
<dxg:GridControl.GroupSummary>
<dxg:GridSummaryItem FieldName="TotalFactura" SummaryType="Sum" ShowInGroupColumnFooter="TotalFactura" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="BaseImponible1" SummaryType="Sum" ShowInGroupColumnFooter="BaseImponible1" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="BaseImponible2" SummaryType="Sum" ShowInGroupColumnFooter="BaseImponible2" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="BaseImponible3" SummaryType="Sum" ShowInGroupColumnFooter="BaseImponible3" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="CuotaIVA1" SummaryType="Sum" ShowInGroupColumnFooter="CuotaIVA1" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="CuotaIVA2" SummaryType="Sum" ShowInGroupColumnFooter="CuotaIVA2" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="CuotaIVA3" SummaryType="Sum" ShowInGroupColumnFooter="CuotaIVA3" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="ImportePagado" SummaryType="Sum" ShowInGroupColumnFooter="ImportePagado" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="ImportePendiente" SummaryType="Sum" ShowInGroupColumnFooter="ImportePendiente" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem SummaryType="Count" Alignment="Right" />
</dxg:GridControl.GroupSummary>
</tsWPF:tsGridControl>
</dxlc:LayoutControl>
</Grid>
</tsWPF:tsUserControl>

View File

@@ -0,0 +1,286 @@

Imports bdGrupoSanchoToro.db
Imports System.Data.Entity
Imports DevExpress.Xpf.Core
Imports tsWPFCore
Imports System.Collections
Imports DevExpress.Xpf.Bars
Imports System.Threading.Tasks
Imports System.Linq.Dynamic
Imports bdGrupoSanchoToro.db.Utilidades
Imports bdGrupoSanchoToro.db.tscGrupoSanchoToro
Imports Microsoft.Win32
Imports System.IO
Imports tsEFCore8.Extensiones
Imports DevExpress.Mvvm.Native
Public Class ucFacturasRecibidas
Private bd As tscGrupoSanchoToro
Public Sub New()
' Esta llamada es exigida por el diseñador.
InitializeComponent()
' Agregue cualquier inicialización después de la llamada a InitializeComponent().
End Sub
Public Overrides Sub Cargado()
ContenedorAplicacion.btGuardar.IsVisible = False
ContenedorAplicacion.siEstado.IsVisible = False
Dim Hoy = Date.Today
teFechaFin.EditValue = Hoy
teFechaInicio.EditValue = New Date(Hoy.Year, 1, 1)
GridSeleccion = gc
Me.HabilitarRefresco = True
End Sub
Public Overrides Function EstablecedcPrincipal(Optional Background As Boolean = False, Optional FuerzaNuevo As Boolean = False, Optional Refrescar As Boolean = False) As tsUtilidades.EstadosAplicacion
If Background OrElse Refrescar Then ObtienefacturasAsync(bd, Background)
Return tsUtilidades.EstadosAplicacion.AplicacionSinIndice
End Function
Public Overrides Sub EstableceDataContextSecundarios(Optional Background As Boolean = False)
Dim Acciones As New List(Of tsWPFCore.Accion)
Acciones.Add(New Accion With {
.idAccion = 1,
.Descripcion = "GENERA EXCEL DE FACTURAS SELECCIONADAS"})
Acciones.Add(New Accion With {
.idAccion = 2,
.Descripcion = "ENVIA EXCEL Y FRAS. IMPRESAS SELECCIONADAS A ASESORIA"})
Me.ContenedorAplicacion.cbAcciones.ItemsSource = Acciones
Me.ContenedorAplicacion.beAcciones.EditValue = Acciones.First.idAccion
End Sub
Public Overrides Sub EstableceTitulo()
Me.docpanel.Caption = "Facturas de Proveedores/Gastos"
End Sub
Public Overrides ReadOnly Property idRegistroAplicacionActual As String
Get
Return "FacturasRecibidas"
End Get
End Property
Public Overrides ReadOnly Property NombreTablaBase As String
Get
Return "facturasrecibidas"
End Get
End Property
Public Overrides ReadOnly Property DescripcionRegistro As String
Get
Return "Facturas de Proveedores"
End Get
End Property
Public Overrides Function ObtieneBD() As tsUtilidades.ItsContexto
bd = tscGrupoSanchoToro.NuevoContexto()
Return bd
End Function
Public Overrides Function ObtienePermisos() As tsUtilidades.Permisos
Dim per = Comun.ObtienePermisos(Me.bd, "AP.ADMINISTRATIVOS", idUsuario)
per.Eliminar = False
Return per
End Function
Private Sub Nuevo() Handles Me.BotonNuevoPulsado
FuncionesDinamicas.AbrirAP(New ucFacturaRecibida, OtrosParametros)
End Sub
Private Sub ap_Enlazar(Celda As DevExpress.Xpf.Grid.EditGridCellData, Defecto As Boolean) Handles Me.Enlazar
Dim ra = DirectCast(Me.gc.CurrentItem, facturasrecibidas)
Select Case Celda.Column.FieldName.ToLower
Case "idfactura"
Dim id As Integer = ra.idFactura
FuncionesDinamicas.AbrirAP(New ucFacturaRecibida(id), OtrosParametros)
Case "idproveedornavigation.razonsocial"
Dim id As Integer = ra.idProveedor
FuncionesDinamicas.AbrirAP(New ucEntidad(id), OtrosParametros)
End Select
End Sub
Private Sub ap_AntesGuardar(sender As Object, e As ItemClickEventArgs, ByRef Cancelar As Boolean, ByRef MensajesError As Hashtable, OpcionGuardado As Integer) Handles Me.AntesGuardar
End Sub
Public Function ObtieneFacturasRecibidas(ByRef DataContext As Object, TextoBusqueda As String, FechaInicio As DateOnly?, FechaFin As DateOnly?, SoloPendientes As Boolean) As List(Of facturasrecibidas)
Dim rs As IQueryable(Of facturasrecibidas)
Dim lf As New List(Of facturasrecibidas)
Dim iNumExc As Integer = 0
Do
Try
rs = bd.facturasrecibidas.Where(Function(x) x.idProveedorNavigation.idEmpresa = EmpresaActual.idEmpresa) _
.Include(Function(x) x.idProveedorNavigation) _
.Include(Function(x) x.idUsuarioNavigation) _
.Include(Function(x) x.documentosfacturasrecibidas) _
.AsQueryable
If FechaInicio.HasValue Then
rs = rs.Where(Function(x) x.FechaFactura >= FechaInicio.Value)
End If
If FechaFin.HasValue Then
rs = rs.Where(Function(x) x.FechaFactura <= FechaFin.Value)
End If
If SoloPendientes Then
rs = rs.Where(Function(x) x.fechaEnvioAsesoria.HasValue = False)
End If
If TextoBusqueda <> "" Then
Dim CamposBusquedaNumericos() As String = {"idFactura"}
Dim CamposBusquedaAlfabeticos() As String = {"idProveedorNavigation.RazonSocial", "idProveedorNavigation.NIF", "NumeroFactura"}
Dim parametros(0) As Object
Dim ExpresionBusqueda = tsWPFCore.Utilidades.Varias.GeneraExpresionBusqueda(TextoBusqueda, CamposBusquedaNumericos, CamposBusquedaAlfabeticos, Nothing)
rs = rs.Where(ExpresionBusqueda)
End If
lf = rs.OrderByDescending(Function(x) x.FechaFactura).ToList
Exit Do
Catch ex As Exception
iNumExc += 1
If iNumExc > 3 Then
rs = Nothing
Exit Do
End If
End Try
Loop
Return lf
End Function
Public Async Sub ObtienefacturasAsync(bd As tscGrupoSanchoToro, Background As Boolean)
Try
Dim rs As New List(Of facturasrecibidas)
Dim Busqueda = If(Me.teBusqueda.EditValue Is Nothing, "", Me.teBusqueda.EditValue)
Dim fi As DateOnly? : If teFechaInicio.EditValue IsNot Nothing Then fi = DateOnly.FromDateTime(teFechaInicio.EditValue)
Dim ff As DateOnly? : If teFechaFin.EditValue IsNot Nothing Then ff = DateOnly.FromDateTime(teFechaFin.EditValue)
Dim bPendientes As Boolean = cbSoloPendientes.IsChecked
If Background Then
Me.ContenedorAplicacion.IsEnabled = False
Await Task.Run(Sub()
rs = ObtieneFacturasRecibidas(bd, Busqueda, fi, ff, bPendientes)
End Sub)
Else
If DXSplashScreen.IsActive = False Then DXSplashScreen.Show(Of tsWPFCore.SplashScreenTecnosis)()
DXSplashScreen.SetState("Buscando Facturas Recibidas ...")
rs = ObtieneFacturasRecibidas(bd, Busqueda, fi, ff, bPendientes)
End If
gc.ItemsSource = rs
DataContext = rs
Catch ex As Exception
If DXSplashScreen.IsActive Then DXSplashScreen.Close()
DXMessageBox.Show(ex.Message, "Error")
Finally
Me.ContenedorAplicacion.IsEnabled = True
If DXSplashScreen.IsActive Then DXSplashScreen.Close()
End Try
End Sub
Private Sub BtBuscar_Click(sender As Object, e As RoutedEventArgs)
ObtienefacturasAsync(bd, False)
End Sub
Private Sub ucFacturasRecibidas_EjecutarAccion(sender As Object, e As ItemClickEventArgs, idAccion As Integer) Handles Me.EjecutarAccion
Try
' Dim ra As entidades = Me.DataContext
Dim tf As List(Of facturasrecibidas) = gc.ItemsSource
Dim fras = gc.ElementosSeleccionados.Cast(Of facturasrecibidas).ToList
If fras.Count = 0 Then
DXMessageBox.Show("Antes debe seleccionar alguna factura recibida", "Atención")
Else
Select Case idAccion
Case 1
Try
Dim sfd As New SaveFileDialog
sfd.FileName = IO.Path.GetDirectoryName("Exportacion") & ("FacturasRecibidas.xlsx").Trim
sfd.Filter = "Fichero Excel (*.xls, *.xlsx, *.csv)|*.xls;*.xlsx;*.csv"
sfd.DefaultExt = ".xlsx"
If sfd.ShowDialog Then
gc.ItemsSource = fras
Select Case IO.Path.GetExtension(sfd.FileName).ToLower
Case ".xls"
tv.ExportToXls(sfd.FileName)
Case ".xlsx"
tv.ExportToXlsx(sfd.FileName)
Case ".csv"
tv.ExportToCsv(sfd.FileName)
End Select
tsUtilidades.Sistema.EjecutaFichero(sfd.FileName)
End If
Catch ex As Exception
Throw New Exception(ex.Message, ex)
Finally
gc.ItemsSource = tf
End Try
Case 2
Try
Dim sCorreo = bd.enumeraciones.First(Function(x) x.Codigo = "CONF.EMAILASESORIA").ValorAlfabeticoLargo
Dim dxnc = New dxwEnvioCorreo(sCorreo, "", "", EmpresaActual.RazonSocial & " - Adjunto le remitimos listado de facturas recibidas solicitadas", "Distinguidos Sres., " & vbCrLf & "Adjunto le remitimos listado de facturas solicitadas", "FacturasRecibidas.zip")
If dxnc.ShowDialog Then
Dim cta = bd.cuentascorreo.First(Function(x) x.Codigo = "DEFECTO" AndAlso x.idEmpresa = EmpresaActual.idEmpresa)
gc.ItemsSource = fras
Dim ms As New MemoryStream
tv.ExportToXlsx(ms)
Dim bFacturas = ms.ToArray
DXSplashScreen.Show(Of tsWPFCore.SplashScreenTecnosis)()
Dim dArchivos As New Dictionary(Of String, Byte())
dArchivos.Add("FacturasRecibidas_" & Today.ToString("yyyy-MM-dd") & ".xlsx", bFacturas)
For Each fr In fras
DXSplashScreen.SetState("Generando archivos de la factura " & fr.NumeroFactura & ", por favor espere ...")
Dim doc = fr.documentosfacturasrecibidas.FirstOrDefault(Function(x) x.Tipo = documentosfacturasrecibidas.TipoDocumentoFacturaEnum.FACTURA_IMPRESA)
If doc IsNot Nothing Then
dArchivos.Add(fr.NumeroFactura.Replace("/", "-").Replace("\", "-") & ".pdf", doc.idFicheroNavigation.Fichero)
Else
Throw New Exception("No se ha adjuntado la factura impresa de la factura " & fr.NumeroFactura)
End If
Next
DXSplashScreen.SetState("Comprimiendo Archivos, por favor espere ...")
Dim bzip = tsUtilidades.zip.ComprimirArchivos(dArchivos)
bdGrupoSanchoToro.db.correos.GeneraRegistroCorreon(bd, dxnc._Asunto, dxnc._Cuerpo, cta, dxnc._Destinatarios, dxnc._CC, dxnc._BCC, bzip, dxnc._Adjunto,, "FACTURASRECIBIDAS")
For Each f In fras
f.FechaEnvioAsesoria = Now
Next
bd.GuardarCambios()
End If
Catch ex As Exception
If ex.Message.StartsWith("No se ha adjuntado la factura impresa de la factura") = False Then Throw New Exception(ex.Message, ex)
If DXSplashScreen.IsActive Then DXSplashScreen.Close()
DXMessageBox.Show(ex.Message, "Atención")
Finally
gc.ItemsSource = tf
End Try
End Select
End If
Catch ex As Exception
FuncionesDinamicas.ErrorNoControladoAp(Me, ex)
'Comun.GeneraRegistroCorreoExcepcion(bd, ex, "ucEntidad_EjecutarAccion")
If DXSplashScreen.IsActive Then DXSplashScreen.Close()
DXMessageBox.Show("Error " & ex.Message, "Error")
Finally
If DXSplashScreen.IsActive Then DXSplashScreen.Close()
End Try
End Sub
'Private Sub ap_ImprimirPlantilla(sender As Object, e As ItemClickEventArgs, idPlantilla As Integer) Handles me.ImprimirPlantilla
' Dim ds As List(Of facturas)
' Dim pl As plantillas = (From p In bd.plantillas Where p.idPlantilla = idPlantilla).First
' Dim sTipo As String = pl.enumeraciones.Codigo
' Dim al As facturas = Me.DataContext
' ds = New List(Of facturas)
' ds.Add(al)
' Select Case sTipo
' Case "GRUPLA.AV-ALBARANES"
' Informes.ImprimirPlantilla(bd, idPlantilla, ds, False)
' End Select
'End Sub
End Class

View File

@@ -0,0 +1,144 @@
<tsWPF:tsUserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:tsWPF="clr-namespace:tsWPFCore;assembly=tsWPFCore" x:Class="ucPagoMultipleFacturas"
mc:Ignorable="d"
d:DesignHeight="768" d:DesignWidth="1366">
<tsWPF:tsUserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/tsWPFCore;component/Plantillas.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</tsWPF:tsUserControl.Resources>
<Grid>
<dxlc:LayoutControl Orientation="Vertical">
<dxlc:LayoutGroup View="GroupBox" Header="Seleccione Cliente para el Pago Múltiple" x:Name="lgFiltrosBusquedaRapida" Width="Auto" HorizontalAlignment="Stretch" >
<tsWPF:tsLayoutItem Label="Razón Social:" Width="500" >
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:ComboBoxEdit x:Name="cbRazonSocial" AutoComplete="True" ValidateOnTextInput="False" IsTextEditable="True" DisplayMember="RazonSocial" ValueMember="idEntidad" AllowDefaultButton="False" TabIndex="0">
<dxe:ComboBoxEdit.Buttons>
<dxe:ButtonInfo x:Name="biBuscarCliente" GlyphKind="Search" IsDefaultButton="False" Click="BiBuscarCliente_Click" />
</dxe:ComboBoxEdit.Buttons>
</dxe:ComboBoxEdit>
</tsWPF:tsLayoutItem>
<Button Content="Mostrar Facturas Pendientes de Pago" Height="25" Width="250" x:Name="btMostrar" Click="btMostrar_Click" IsDefault="True" TabIndex="1" Margin="20,0,0,0" />
</dxlc:LayoutGroup>
<dxlc:LayoutGroup>
<tsWPF:tsGridControl x:Name="gcFacturas" TabIndex="2" >
<tsWPF:tsGridControl.PropiedadesTSGC>
<tsWPF:PropiedadesTSGC />
</tsWPF:tsGridControl.PropiedadesTSGC>
<dxg:GridControl.Columns>
<tsWPF:tsGridColumn Header="Seleccionar" FieldName="Marca_TMP" Width="80" IsSmart="True" SoloLectura="False" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:CheckEditSettings IsThreeState="False" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="NumeroFactura" Width="120" IsSmart="True" Header="Nº Factura" CellTemplate="{DynamicResource VerDetalleTemplate}" SoloLectura="True" />
<tsWPF:tsGridColumn FieldName="idClienteNavigation.RazonSocial" Header="Razón Social" Width="300" IsSmart="True" CellTemplate="{DynamicResource VerDetalleTemplate}" SoloLectura="True" />
<tsWPF:tsGridColumn FieldName="idClienteNavigation.NIF" Header="N.I.F." Width="100" IsSmart="True" SoloLectura="True" />
<tsWPF:tsGridColumn FieldName="FechaFactura" Header="Fecha Factura" IsSmart="True" Width="100" SoloLectura="True" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:DateEditSettings DisplayFormat="d"/>
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="TotalBaseImponible" HorizontalHeaderContentAlignment="Right" Width="100" SoloLectura="True" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="TotalIVA" HorizontalHeaderContentAlignment="Right" Width="100" SoloLectura="True" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="TotalFactura" HorizontalHeaderContentAlignment="Right" Width="100" SoloLectura="True" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="ImportePagado" HorizontalHeaderContentAlignment="Right" Width="100" SoloLectura="True" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="ImportePendiente" HorizontalHeaderContentAlignment="Right" Width="120" SoloLectura="True" >
<tsWPF:tsGridColumn.EditSettings>
<dxe:TextEditSettings DisplayFormat="c2" HorizontalContentAlignment="Right" />
</tsWPF:tsGridColumn.EditSettings>
</tsWPF:tsGridColumn>
<tsWPF:tsGridColumn FieldName="Observaciones" Width="400" IsSmart="True" SoloLectura="True"/>
<tsWPF:tsGridColumn FieldName="usuarios.Usuario" Header="Usuario" Width="150" IsSmart="True" SoloLectura="True"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView x:Name="tv" ShowSearchPanelMode="Always" ShowGroupPanel="True" ShowTotalSummary="True" ShowGroupFooters="True" />
</dxg:GridControl.View>
<tsWPF:tsGridControl.TotalSummary>
<dxg:GridSummaryItem FieldName="BaseImponible" SummaryType="Sum" ShowInColumn="TotalBaseImponible" DisplayFormat=" {0:c2}"/>
<!--<dxg:GridSummaryItem FieldName="Descuento" SummaryType="Sum" ShowInColumn="Descuento" DisplayFormat=" {0:c2}"/>-->
<dxg:GridSummaryItem FieldName="IVA" SummaryType="Sum" ShowInColumn="IVA" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="TotalFactura" SummaryType="Sum" ShowInColumn="TotalFactura" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="ImportePagado" SummaryType="Sum" ShowInColumn="ImportePagado" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="ImportePendiente" SummaryType="Sum" ShowInColumn="ImportePendiente" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem SummaryType="Count" ShowInColumn="entidades.RazonSocial" DisplayFormat="Nº Facturas: {0:n0}" />
</tsWPF:tsGridControl.TotalSummary>
<dxg:GridControl.GroupSummary>
<dxg:GridSummaryItem FieldName="ImporteBruto" SummaryType="Sum" ShowInGroupColumnFooter="ImporteBruto" DisplayFormat=" {0:c2}"/>
<!--<dxg:GridSummaryItem FieldName="Descuento" SummaryType="Sum" ShowInGroupColumnFooter="Descuento" DisplayFormat=" {0:c2}"/>-->
<dxg:GridSummaryItem FieldName="IVA" SummaryType="Sum" ShowInGroupColumnFooter="IVA" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="TotalFactura" SummaryType="Sum" ShowInGroupColumnFooter="TotalFactura" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="ImportePagado" SummaryType="Sum" ShowInGroupColumnFooter="ImportePagado" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem FieldName="ImportePendiente" SummaryType="Sum" ShowInGroupColumnFooter="ImportePendiente" DisplayFormat=" {0:c2}"/>
<dxg:GridSummaryItem SummaryType="Count" ShowInGroupColumnFooter="entidades.RazonSocial" DisplayFormat=" {0:n0}" />
</dxg:GridControl.GroupSummary>
</tsWPF:tsGridControl>
</dxlc:LayoutGroup>
<dxlc:LayoutGroup View="GroupBox" Header="Seleccione Datos del Pago" Width="Auto" HorizontalAlignment="Stretch" >
<dxlc:LayoutGroup Orientation="Vertical" Width="850">
<dxlc:LayoutGroup >
<tsWPF:tsLayoutItem Label="Total Facturas A Pagar:" Width="300" HorizontalAlignment="Left">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS Modificable="NoModificable" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit x:Name="teTotalAPagar" IsReadOnly="True" Mask="C2" MaskType="Numeric" MaskUseAsDisplayFormat="True" TabIndex="3" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Caja:" Width="300">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:ComboBoxEdit x:Name="cbCaja" AutoComplete="True" DisplayMember="Descripcion" ValueMember="idCaja" TabIndex="4" AllowNullInput="True" />
</tsWPF:tsLayoutItem>
<tsWPF:tsLayoutItem Label="Fecha Pago:">
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="True" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:DateEdit x:Name="deFechaPago" AllowNullInput="False" TabIndex="5" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<tsWPF:tsLayoutItem Label="Observaciones:" >
<tsWPF:tsLayoutItem.PropiedadesTS>
<tsWPF:PropiedadesTS UsualCorreccion="True" />
</tsWPF:tsLayoutItem.PropiedadesTS>
<dxe:TextEdit x:Name="teObservaciones" TabIndex="6" MaxLength="200" />
</tsWPF:tsLayoutItem>
</dxlc:LayoutGroup>
<Button Content="Cobrar Facturas Seleccionadas" Height="25" Width="250" x:Name="btPagar" Click="btPagar_Click" IsDefault="True" TabIndex="6" Margin="20,0,0,0" />
</dxlc:LayoutGroup>
<dxlc:LayoutGroup Orientation="Vertical"/>
</dxlc:LayoutControl>
</Grid>
</tsWPF:tsUserControl>

View File

@@ -0,0 +1,202 @@

Imports bdGrupoSanchoToro.tscGrupoSanchoToro
Imports DevExpress.Xpf.Core
Imports tsWPFCore
Imports Microsoft.Win32
Imports DevExpress.Xpf.Grid
Imports bdGrupoSanchoToro.db.Utilidades
Imports bdGrupoSanchoToro.db
Public Class ucPagoMultipleFacturas
Private bd As bdGrupoSanchoToro.tscGrupoSanchoToro
Public Sub New()
' Esta llamada es exigida por el diseñador.
InitializeComponent()
' Agregue cualquier inicialización después de la llamada a InitializeComponent().
End Sub
Public Overrides Sub Cargado()
ContenedorAplicacion.btGuardar.IsVisible = True
ContenedorAplicacion.btNuevo.IsVisible = False
ContenedorAplicacion.siEstado.IsVisible = False
Me.HabilitarRefresco = False
End Sub
Public Overrides Function EstablecedcPrincipal(Optional Background As Boolean = False, Optional FuerzaNuevo As Boolean = False, Optional Refrescar As Boolean = False) As tsUtilidades.EstadosAplicacion
cbRazonSocial.ItemsSource = bd.entidades.Where(Function(x) x.EsCliente AndAlso x.idEmpresa = EmpresaActual.idEmpresa).ToList
cbCaja.ItemsSource = bd.cajas.OrderBy(Function(x) x.Descripcion AndAlso x.idEmpresa = EmpresaActual.idEmpresa).ToList
deFechaPago.EditValue = Now.Date
Return tsUtilidades.EstadosAplicacion.AplicacionSinIndice
End Function
Public Overrides Sub EstableceDataContextSecundarios(Optional Background As Boolean = False)
End Sub
Public Overrides Sub EstableceTitulo()
Me.docpanel.Caption = "Cobro Múltiple de Fras. Clientes"
End Sub
Public Overrides ReadOnly Property idRegistroAplicacionActual As String
Get
Return "PagoMultiple"
End Get
End Property
Public Overrides ReadOnly Property NombreTablaBase As String
Get
Return "facturas"
End Get
End Property
Public Overrides ReadOnly Property DescripcionRegistro As String
Get
Return "Cobro Multiple de Facturas A Clientes"
End Get
End Property
Public Overrides Function ObtieneBD() As tsUtilidades.ItsContexto
bd = tscGrupoSanchoToro.NuevoContexto
Return bd
End Function
Public Overrides Function ObtienePermisos() As tsUtilidades.Permisos
Dim per = Comun.ObtienePermisos(Me.bd, "AP.ADMINISTRATIVOS", idUsuario)
per.Eliminar = False
per.Nuevos = False
per.Modificar = False
Return per
End Function
Private Sub ap_Enlazar(Celda As DevExpress.Xpf.Grid.EditGridCellData, Defecto As Boolean) Handles Me.Enlazar
Dim ra = DirectCast(Me.gcFacturas.CurrentItem, facturas)
Select Case Celda.Column.FieldName.ToLower
Case "numerofactura"
Dim id As Integer = ra.idFactura
FuncionesDinamicas.AbrirAP(New ucFacturaEmitida(id), OtrosParametros)
Case "idclientenavigation.razonsocial"
Dim id As Integer = ra.idCliente
FuncionesDinamicas.AbrirAP(New ucEntidad(id), OtrosParametros)
End Select
End Sub
Private Sub btMostrar_Click(sender As Object, e As RoutedEventArgs)
Try
If cbRazonSocial.EditValue Is Nothing Then
DXMessageBox.Show("Seleccione primero el cliente", "Atención")
Else
If DXSplashScreen.IsActive = False Then DXSplashScreen.Show(Of SplashScreenTecnosis)()
DXSplashScreen.SetState("Buscando facturas ...")
Dim idcliente As Integer = cbRazonSocial.EditValue
Dim facs = bd.facturas.Include(Function(x) x.movimientoscaja).Include(Function(x) x.idClienteNavigation).Include(Function(x) x.idUsuarioNavigation).Where(Function(x) x.idCliente = idcliente).OrderBy(Function(x) x.FechaFactura).ToList.Where(Function(x) x.ImportePendiente <> 0).ToList
Me.gcFacturas.ItemsSource = facs
CalculaTotalAPagar()
End If
If DXSplashScreen.IsActive Then DXSplashScreen.Close()
Catch ex As Exception
If DXSplashScreen.IsActive Then DXSplashScreen.Close()
FuncionesDinamicas.ErrorNoControladoAp(Me, ex)
DXMessageBox.Show(ex.Message, "Error")
End Try
End Sub
Private Sub BiBuscarCliente_Click(sender As Object, e As RoutedEventArgs)
Dim dxw As New dxwEntidades(bd, True, False)
If dxw.ShowDialog Then
cbRazonSocial.EditValue = dxw.Entidad.idEntidad
End If
End Sub
Private Sub CalculaTotalAPagar()
Dim lf As List(Of facturas) = Me.gcFacturas.ItemsSource
lf = lf.Where(Function(x) x.Marca_TMP).ToList
Dim TotalFacturas = lf.Sum(Function(x) x.ImportePendiente)
teTotalAPagar.EditValue = Math.Round(TotalFacturas, 2, MidpointRounding.AwayFromZero)
End Sub
Private Sub tvMovimientos_CellValueChanging(sender As Object, e As CellValueChangedEventArgs) Handles tv.CellValueChanging
tv.CommitEditing()
CalculaTotalAPagar()
End Sub
Private Sub btPagar_Click(sender As Object, e As RoutedEventArgs)
Try
If deFechaPago.EditValue Is Nothing Then Throw New Exception("La fecha de pago es obligatoria")
Dim FechaPago As Date = deFechaPago.EditValue
If cbCaja.EditValue Is Nothing Then Throw New Exception("La caja de pago es obligatoria")
Dim lf As List(Of facturas) = Me.gcFacturas.ItemsSource
lf = lf.Where(Function(x) x.Marca_TMP).ToList
Dim idCaja As Integer = cbCaja.EditValue
Dim cj = bd.cajas.First(Function(x) x.idCaja = idCaja)
If lf.Count = 0 Then Throw New Exception("Seleccione al menos una factura para pagar")
Dim lr As New List(Of movimientoscaja)
For Each f In lf
Dim nm As New movimientoscaja
With nm
.idFacturaNavigation = f
.Importe = f.ImportePendiente
.Tipo = TipoMovimientoEnum.RECIBO_CLIENTE
.idCaja = idCaja
.Fecha = FechaPago
.FechaCreacion = Now
.idUsuario = idUsuario
.Observaciones = If(teObservaciones.EditValue IsNot Nothing, teObservaciones.EditValue.ToString, "")
.EstableceNumeroRecibo()
End With
f.ImportePagado = Math.Round(f.movimientoscaja.Sum(Function(x) x.Importe), 2, MidpointRounding.AwayFromZero)
f.FechaPago = New DateOnly(FechaPago.Year, FechaPago.Month, FechaPago.Day)
f.movimientoscaja.Add(nm)
bd.SaveChanges()
lr.Add(nm)
Next
teObservaciones.EditValue = ""
Dim cp As String = "RECIBO"
Dim pl = bd.plantillas.First(Function(x) x.Codigo = cp)
DXMessageBox.Show("Se han pagado " & lf.Count.ToString & " facturas. Seleccione ahora el fichero dónde se guardará el pdf de los recibos correspondientes.", "Atención")
Dim b() As Byte = Informes.GuardaInformeEnPdf(bd, pl.idPlantilla, lr)
Dim sfd As New SaveFileDialog
sfd.FileName = "Pago Facturas " & FechaPago.ToString("yyyy-MM-dd") & ".pdf"
sfd.Filter = "Fichero PDF|*.pdf"
sfd.DefaultExt = ".pdf"
If sfd.ShowDialog Then
IO.File.WriteAllBytes(sfd.FileName, b)
tsUtilidades.Sistema.EjecutaFichero(sfd.FileName)
End If
' Informes.ImprimirPlantilla(bd, pl.idFicheroNavigation.Fichero, lr, False, 1)
RefrescaAplicaciones()
btMostrar_Click(Nothing, Nothing)
Catch ex As Exception
DXMessageBox.Show(ex.Message, "Atención")
End Try
End Sub
Private Sub cbRazonSocial_PreviewKeyDown(sender As Object, e As KeyEventArgs) Handles cbRazonSocial.PreviewKeyDown
If e.Key = Key.F6 Then BiBuscarCliente_Click(Nothing, Nothing)
End Sub
End Class