2 using System.Collections.Generic;
21 namespace sage.ew.docscompra.Forms
33 public dynamic _DocumentoOrigen = null;
35 private string _UltimoDocumentoSeleccionado =
string.Empty;
38 private bool _lColor = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_color"));
39 private bool _lPeso = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_Peso"));
40 private bool _lCajas = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_Cajas"));
41 private bool _lObra = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_obra"));
42 private bool _lHera = Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_hera"));
53 string _cDesCajas = (Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_hera")) && Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_cajas"))) ?
54 "Nº Agrup." : Convert.ToString(EW_GLOBAL._GetVariable(
"wc_descajas",
"Cajas")).Trim();
56 string _cDesUnidades = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_desunidades")).Trim();
62 public string _Empresa =
string.Empty;
67 public string _Numero =
string.Empty;
72 public string _Factura =
string.Empty;
80 get {
return _Listado; }
81 set { _Listado = value; }
90 get {
return _ListadoDetalle; }
91 set { _ListadoDetalle = value; }
97 protected bool _lSeleccion_Multiple =
false;
98 private bool _lMarcarDesmarcar =
true;
99 private string _cNomColSeleccionar =
"Sel.";
104 public List<object> _Seleccion_Multiple_Lista
106 get {
return _lis_Seleccion_Multiple_Resultados; }
108 private List<object> _lis_Seleccion_Multiple_Resultados =
new List<object>();
113 public List<string> _Seleccion_Multiple_Campos
117 _lis_Seleccion_Multiple_Campos = value;
118 if (value != null) _Activar_Seleccion_Multiple();
124 protected List<string> _lis_Seleccion_Multiple_Campos =
new List<string>();
130 public bool ModoCapturaParaTraspaso {
get;
set; } =
false;
131 private bool _lMarcarDesmarcarDetalle =
true;
137 private bool ConfigurandoControles
139 get {
return _configurandoControles; }
142 _configurandoControles = value;
143 if (!_configurandoControles && _recargaDatosRequerida)
145 _recargaDatosRequerida =
false;
150 private bool _configurandoControles =
false;
151 private bool _recargaDatosRequerida =
false;
153 #endregion propiedades 155 #region constructores 172 _Init(loList, (
Listados)Activator.CreateInstance(loList.GetType()));
183 _Init(loCabeceras, loDetalles);
193 InitializeComponent();
198 _Empresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
199 btImprimir1._Click_Before +=
new botones.Clases.btImprimir._Click_Before_Handler(BtImprimir1__Click_Before);
200 if(toCabecera != null)
201 _Cabeceras = toCabecera;
202 if(toDetalle != null)
203 _Detalles = toDetalle;
205 _MostrarCrearAccesoDirecto =
false;
206 _MostrarAccesoFavoritos =
false;
208 ConfigurarControlesHeredados();
216 private void ConfigurarControlesHeredados()
219 _oTablePpal.Width = _CalcularAnchoControlCabecera();
222 _FiltrarArticulo =
false;
228 _oFiltroVertical.Controls.Add(panelCancel);
229 _oFiltroVertical.Controls.Add(panelFacturados);
230 _oFiltroVertical.Controls.Add(panelTrasp);
233 _oFiltroHorizontal.Controls.Add(panelComentarios);
236 scDatos.Location = _CalcularLocationDatos();
237 scDatos.Height = _CalcularAlturaDisponible();
246 return new Point (base._CalcularLocationDatos().X, base._CalcularLocationDatos().Y - 28);
249 #endregion constructores 258 void ChkComentarios_CheckedChanged(
object sender, EventArgs e)
260 if (updatingCheckComentarios ==
true)
263 updatingCheckComentarios =
true;
265 if (ModoCapturaParaTraspaso && !chkComentarios.Checked)
267 chkComentarios.Checked =
true;
268 string mensaje =
"Para operaciones de traspaso es necesario tener visibles los comentarios.";
269 _MessageBox(mensaje, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
272 _lLastSelectedIndex = 0;
273 if (ewgridDatos.SelectedRows.Count > 0)
274 _lLastSelectedIndex = ewgridDatos.SelectedRows[0].Index;
276 _Refrescar_Detalle();
278 updatingCheckComentarios =
false;
281 private bool updatingCheckComentarios =
false;
286 private void _Activar_Seleccion_Multiple()
289 _lSeleccion_Multiple =
true;
292 btNavegar.Text =
"Capturar documentos";
293 btNavegar.TextImageRelation = TextImageRelation.ImageBeforeText;
294 btNavegar.TextAlign = ContentAlignment.MiddleCenter;
302 base._Cargar_Datos();
312 private Listados GetListadosInstance(
bool tlCabeceras =
true)
316 loType = _Cabeceras.GetType();
318 loType = _Detalles.GetType();
328 private void FrmDocumentosPorProveedor_Shown(
object sender, EventArgs e)
330 ConfigurandoControles =
true;
333 ewgridDatos.Parent = scDatos.Panel1;
334 ewgridDatos.Top = lbDocumentos.Top + 20;
335 ewgridDatos.Left = ewgridDetalle.Left;
336 ewgridDatos.Size = ewgridDetalle.Size;
337 ewgridDatos.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
338 ewgridDatos.ReadOnly =
true;
339 ewgridDatos.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
340 ewgridDatos.RowHeadersWidth = 24;
341 ewgridDatos.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
342 ewgridDatos.SelectionChanged +=
new EventHandler(EwgridDatos_SelectionChanged);
343 ewgridDatos.CellMouseDoubleClick +=
new DataGridViewCellMouseEventHandler(EwgridDatos_CellMouseDoubleClick);
344 ewgridDatos.AllowUserToAddRows =
false;
345 ewgridDatos.AllowUserToDeleteRows =
false;
348 ewgridDetalle.Parent = scDatos.Panel2;
349 ewgridDetalle.Top = lbDetalle.Top + 20;
350 ewgridDetalle.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
351 ewgridDetalle.ReadOnly =
true;
352 ewgridDetalle.RowHeadersWidth = 24;
353 ewgridDetalle.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
354 ewgridDetalle.AllowUserToAddRows =
false;
355 ewgridDetalle.AllowUserToDeleteRows =
false;
359 btNavegar.Image = images.Properties.Resources.doc_navigate;
360 btNavegar.ImageAlign = ContentAlignment.MiddleLeft;
361 btListar.Image = images.Properties.Resources.reports;
362 btListar.ImageAlign = ContentAlignment.MiddleLeft;
365 if (_lSeleccion_Multiple || ModoCapturaParaTraspaso)
367 ewgridDatos.Columns[_cNomColSeleccionar].ReadOnly =
false;
368 ewgridDatos.MultiSelect =
true;
369 ewgridDatos.CellClick +=
new DataGridViewCellEventHandler(Evento_ewgridDatos_CellClick);
370 ewgridDatos.ColumnHeaderMouseClick +=
new DataGridViewCellMouseEventHandler(Evento_ewgridDatos_ColumnHeaderMouseClick);
372 if(ModoCapturaParaTraspaso)
374 if (!chkComentarios.Checked) { chkComentarios.Checked =
true; }
375 ewgridDatos.CellValueChanged += EwgridDatos_CellValueChanged;
376 ewgridDetalle.Columns[_cNomColSeleccionar].ReadOnly =
false;
377 ewgridDetalle.MultiSelect =
true;
378 ewgridDetalle.CellClick +=
new DataGridViewCellEventHandler(Evento_ewgridDetalle_CellClick);
379 ewgridDetalle.ColumnHeaderMouseClick +=
new DataGridViewCellMouseEventHandler(Evento_ewgridDetalle_ColumnHeaderMouseClick);
384 if (!
string.IsNullOrWhiteSpace(_Proveedor))
391 txtProveedor._setTxtBoxFocus();
394 ActualizarEtiquetaSimboloDivisa();
397 InicializarModoCapturaParaTraspaso();
399 ConfigurandoControles =
false;
407 if (_Cabeceras == null)
410 if (ConfigurandoControles)
412 _recargaDatosRequerida =
true;
416 _cargandoCabeceras =
true;
418 DataTable ldtDatos =
new DataTable();
423 _Listado = _Refrescar_Datos_Cargar_Opciones_Listado();
426 if (!String.IsNullOrEmpty(_Proveedor))
428 _Listado._Filtros.Add(
"ProveedorUnico", _Proveedor);
432 ldtDatos = _Listado._DataTable();
434 if (ldtDatos == null)
438 _SuprimirDatos(ref ldtDatos);
439 SuprimirLineasBold(ldtDatos);
440 SuprimirCampos(ldtDatos);
443 if (_lSeleccion_Multiple || ModoCapturaParaTraspaso)
445 CrearColumnaDeSeleccion(ldtDatos);
449 ldtDatos.DefaultView.Sort =
"fecha DESC, documento DESC";
452 ldtDatos = _FiltrarDataTableCabeceras(ldtDatos);
455 ewgridDatos.DataSource = ldtDatos;
458 CalcularCasillaImporte(ldtDatos);
463 GestionarRecuperacionDeCabecerasSeleccionadas();
465 _Refrescar_Detalle();
467 _cargandoCabeceras =
false;
478 private void CalcularCasillaImporte(DataTable ldtDatos)
481 decimal lnImporteTotal = decimal.Zero;
482 if (!ModoCapturaParaTraspaso)
485 string nombreCamporImporte = DeterminarNombreDelCampoImporteCabeceras(ldtDatos);
486 lnImporteTotal = ldtDatos.AsEnumerable().Select(r => Convert.ToDecimal(!r.IsNull(nombreCamporImporte) ? r.Field<decimal>(nombreCamporImporte) : 0)).Sum();
488 EstablecerValorCasillaImporte(lnImporteTotal);
491 private void EstablecerValorCasillaImporte(decimal valor)
494 if (_FiltrarDivisa && _Listado._DivisaConfig._DivisaTodas)
498 txtImporte.
Text = valor.ToString(_Listado._DivisaConfig._DivisaMascaraImporte);
502 private string DeterminarNombreDelCampoImporteCabeceras(DataTable datos)
505 return DeterminarNombreDelCampoImporte_Impl(_Listado, datos);
508 private string DeterminarNombreDelCampoImporteDetalle()
511 DataTable datos = (DataTable)ewgridDetalle.DataSource;
512 return DeterminarNombreDelCampoImporte_Impl(_Detalles, datos);
515 private string DeterminarNombreDelCampoImporte_Impl(
Listados listado, DataTable datos)
517 string nombreCamporImporte =
listado._DivisaConfig._DivisaEspecifica ==
true ?
"divisa_importe" :
"importe";
518 if (!datos.Columns.Contains(nombreCamporImporte))
519 nombreCamporImporte =
"importe";
520 return nombreCamporImporte;
523 private void ActualizarImporteSeleccionado()
525 decimal acumulado = decimal.Zero;
526 foreach (var item
in dicDetallesSeleccionados)
528 acumulado += item.Value.Importe;
530 EstablecerValorCasillaImporte(acumulado);
533 private bool _cargandoCabeceras =
false;
535 private void CrearColumnaDeSeleccion(DataTable ldtDatos)
537 using (DataColumn ldtColumnaSel =
new DataColumn())
541 ldtColumnaSel.DataType = Type.GetType(
"System.Boolean");
542 ldtColumnaSel.AllowDBNull =
false;
543 ldtColumnaSel.Caption = _cNomColSeleccionar;
544 ldtColumnaSel.ColumnName = _cNomColSeleccionar;
545 ldtColumnaSel.DefaultValue =
false;
546 ldtDatos.Columns.Add(ldtColumnaSel);
547 ldtDatos.Columns[ldtDatos.Columns.Count - 1].SetOrdinal(0);
551 private void SuprimirCampos(DataTable ldtDatos)
553 List<string> llisExcluidas =
new List<string>() {
"EJERCICIO",
"multiejercicio",
"empresa" };
554 foreach (
string lcNomCol
in llisExcluidas)
556 if (ldtDatos.Columns.Contains(lcNomCol)) ldtDatos.Columns.Remove(lcNomCol);
564 private void SuprimirLineasBold(DataTable tdtDatos)
567 if (tdtDatos.Columns.Contains(
"bold"))
569 for (
int lnIndex = tdtDatos.Rows.Count - 1; lnIndex >= 0; lnIndex--)
571 if (tdtDatos.Columns.Contains(
"bold") && tdtDatos.Rows[lnIndex][
"bold"] != DBNull.Value && Convert.ToBoolean(tdtDatos.Rows[lnIndex][
"bold"]))
573 tdtDatos.Rows[lnIndex].Delete();
578 if (tdtDatos.Columns.Contains(
"bold")) tdtDatos.Columns.Remove(
"bold");
597 void BtImprimir1__Click_Before(ref
bool tlOk)
599 Listados loLis = this._Refrescar_Datos_Cargar_Opciones_Listado();
601 _AplicarConfiguracionDivisa(loLis);
603 loLis.
_Filtros.Add(
"ProveedorUnico", _Proveedor);
604 if (!loLis.
_Opciones.ContainsKey(
"lMostrarlineas"))
605 loLis.
_Opciones.Add(
"lMostrarlineas",
true);
607 loLis.
_Opciones[
"lMostrarlineas"] =
true;
609 if (!loLis.
_Filtros.ContainsKey(
"ComentariosUnico"))
610 loLis.
_Filtros.Add(
"ComentariosUnico", chkComentarios.Checked);
612 loLis.
_Filtros[
"ComentariosUnico"] = chkComentarios.Checked;
617 btImprimir1._Filtros.Clear();
618 btImprimir1._Filtros.Add(
"TituloDocumentoCompra", Text.ToUpper());
619 btImprimir1._Filtros.Add(
"Ejercicio", DB.Ejercicio_EW);
620 btImprimir1._Filtros.Add(
"Proveedor", String.Format(
"{0} - {1}", _Proveedor, loProveedor.
_Nombre));
623 _SetFiltrosReportDivisa();
626 btImprimir1._Filtros.Add(
"TituloCajas", Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_hera")) && Convert.ToBoolean(EW_GLOBAL._GetVariable(
"wl_cajas")) ?
"Nº agrup." :
"Cajas");
633 btImprimir1._DataTable = _Refrescar_Datos_ExecuteListado(loLis);
636 listados.Listados.DocumentosProveedor loTmp =
new listados.Listados.DocumentosProveedor();
639 btImprimir1._DataTable.TableName = btImprimir1._Title =
"Documentos por proveedor";
643 if (loLis is listados.Listados.DocumentosProveedor)
644 ldtDatos = ((listados.Listados.DocumentosProveedor)loLis)._ExecuteReport();
646 ldtDatos = _Listado._Execute(loLis.
_Filtros);
653 btImprimir1._DataTable = _SuprimirColumnas(ldtDatos.DefaultView.ToTable(), _Listado);
674 toList = this.GetListadosInstance(tlCabeceras:
true);
681 protected internal void _Refrescar_Detalle()
683 DataTable ldtDatos = (DataTable)ewgridDatos.DataSource;
685 string lcNumero =
"";
687 if (ldtDatos.Rows.Count > 0)
689 lnRowAct = ewgridDatos.CurrentCell.RowIndex;
690 lcNumero = ewgridDatos[
"Documento", lnRowAct].Value.ToString();
693 _Refrescar_Detalle(lcNumero);
696 if (ewgridDatos.Rows.Count > 0)
698 ewgridDatos.ClearSelection();
699 if (_lLastSelectedIndex >= 0 && ldtDatos.Rows.Count > _lLastSelectedIndex)
700 ewgridDatos.Rows[_lLastSelectedIndex].Selected =
true;
702 ewgridDatos.Rows[0].Selected =
true;
709 private void _Refrescar_Detalle(
string tcNumero)
711 DataTable ldtDatosDet =
new DataTable();
714 _ListadoDetalle = _Refrescar_Detalle_Cargar_Opciones_Listado();
717 _ListadoDetalle._Filtros.Add(
"NumeroUnico", tcNumero);
718 _ListadoDetalle._Filtros.Add(
"ComentariosUnico", chkComentarios.Checked);
719 if (!
string.IsNullOrWhiteSpace(_Proveedor))
721 _ListadoDetalle._Filtros.Add(
"ProveedorUnico", _Proveedor);
725 ldtDatosDet = _ListadoDetalle._DataTable();
728 if (ModoCapturaParaTraspaso)
730 CrearColumnaDeSeleccion(ldtDatosDet);
734 if (ldtDatosDet.Columns.Contains(
"bold"))
736 for (
int lnIndex = ldtDatosDet.Rows.Count -1; lnIndex >= 0; lnIndex--)
738 if (ldtDatosDet.Rows[lnIndex][
"bold"] != DBNull.Value &&
739 Convert.ToBoolean(ldtDatosDet.Rows[lnIndex][
"bold"]))
741 ldtDatosDet.Rows[lnIndex].Delete();
746 List<string> llisExcluidas =
new List<string>() {
"bold",
"titulo",
"titulo1",
"titulo2",
"titulo3",
"titulo4",
"codtitulo",
"codtitulo1",
"codtitulo2",
"codtitulo3",
"codtitulo4",
"codtitulo5",
"divisa",
"empresa",
"EJERCICIO",
"multiejercicio" };
747 foreach (
string lcNomCol
in llisExcluidas)
749 if (ldtDatosDet.Columns.Contains(lcNomCol)) ldtDatosDet.Columns.Remove(lcNomCol);
752 if (ldtDatosDet == null)
756 ewgridDetalle.DataSource = ldtDatosDet;
759 _Configurar_Grid_Detalle();
762 if (ewgridDetalle.Columns.Contains(
"servidas") && ewgridDetalle.Columns.Contains(
"traspasado"))
764 foreach (DataGridViewRow row
in ewgridDetalle.Rows)
766 if (!
string.IsNullOrWhiteSpace(Convert.ToString(row.Cells[
"tipo_iva"].Value)) && (Convert.ToDecimal(row.Cells[
"unidades"].Value) - Convert.ToDecimal(row.Cells[
"servidas"].Value) == 0))
767 row.Cells[
"traspasado"].Value =
true;
771 GestionarRecuperacionDeDetallesSeleccionados();
783 toList = GetListadosInstance(tlCabeceras:
false);
790 private void _Configurar_Grid()
793 if (ewgridDatos.Columns.Contains(
"obra"))
794 ewgridDatos.Columns[
"obra"].Visible = _lObra;
796 if (ModoCapturaParaTraspaso)
797 ewgridDatos.Columns[_cNomColSeleccionar].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
799 _ConfigurarGridDivisa(_Listado, ref ewgridDatos);
802 _ConfigurarColumnaNumerica(
"importe", _oMascaraImport.
_Mascara_Net, ref ewgridDatos);
804 _Nombre_Columnas(ref ewgridDatos);
806 ewgridDatos.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
817 foreach (DataGridViewColumn ldc
in toGrid.Columns)
822 if (toGrid.Columns.Contains(
"nombre_proveedor"))
824 toGrid.Columns[
"nombre_proveedor"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
825 toGrid.Columns[
"nombre_proveedor"].MinimumWidth = 100;
826 toGrid.Columns[
"nombre_proveedor"].HeaderText =
"Nombre proveedor";
828 if (toGrid.Columns.Contains(
"f_entreg"))
830 toGrid.Columns[
"f_entreg"].HeaderText =
"Entrega";
834 if (toGrid.Columns.Contains(
"divisa_precio") && _Listado != null)
836 toGrid.Columns[
"divisa_precio"].HeaderText =
"Precio (" + _Listado._DivisaConfig.ObtenerSimboloDivisa()+
")";
837 toGrid.Columns[
"divisa_precio"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
840 if (toGrid.Columns.Contains(
"divisa_importe") && _Listado != null)
842 toGrid.Columns[
"divisa_importe"].HeaderText =
"Importe (" + _Listado._DivisaConfig.ObtenerSimboloDivisa()+
")";
843 toGrid.Columns[
"divisa_importe"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
846 if (toGrid.Columns.Contains(
"divisa_total") && _Listado != null)
848 toGrid.Columns[
"divisa_total"].HeaderText =
"Total (" + _Listado._DivisaConfig.ObtenerSimboloDivisa()+
")";
849 toGrid.Columns[
"divisa_total"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
853 foreach (DataGridViewColumn ldcCololumna
in toGrid.Columns)
855 ldcCololumna.HeaderText = ldcCololumna.HeaderText.Replace(
'_',
' ');
856 ldcCololumna.HeaderText = ldcCololumna.HeaderText.Replace(
"albaran",
"albarán");
857 ldcCololumna.HeaderText = ldcCololumna.HeaderText.Replace(
"definicion",
"definición");
858 ldcCololumna.HeaderText = ldcCololumna.HeaderText.Replace(
"articulo",
"artículo");
859 ldcCololumna.HeaderText = ldcCololumna.HeaderText.Replace(
"linia",
"línea");
860 ldcCololumna.HeaderText = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(ldcCololumna.HeaderText).Trim();
869 void Evento_ewgridDatos_CellClick(
object sender, DataGridViewCellEventArgs e)
873 if (e.ColumnIndex == ewgridDatos.Columns[_cNomColSeleccionar].Index)
875 if (IsValidCabecera(e.RowIndex))
877 bool llNouEstat = !(bool)ewgridDatos[e.ColumnIndex, e.RowIndex].Value;
878 ewgridDatos[e.ColumnIndex, e.RowIndex].Value = llNouEstat;
879 GestionarCabecerasSeleccionadas(((DataRowView)ewgridDatos.Rows[e.RowIndex].DataBoundItem).Row, llNouEstat);
884 _MessageBox(MotivoCabeceraInvalida, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
890 void Evento_ewgridDatos_ColumnHeaderMouseClick(
object sender, DataGridViewCellMouseEventArgs e)
892 if (ModoCapturaParaTraspaso)
895 if (e.ColumnIndex == ewgridDatos.Columns[_cNomColSeleccionar].Index)
897 ewgridDatos.SelectionChanged -=
new EventHandler(EwgridDatos_SelectionChanged);
899 MarcarDesmarcarTodoElGridDeDatos(_lMarcarDesmarcar);
902 _lMarcarDesmarcar = !_lMarcarDesmarcar;
906 private void EwgridDatos_CellValueChanged(
object sender, DataGridViewCellEventArgs e)
908 if (sender == null || !ewgridDatos.Columns.Contains(_cNomColSeleccionar) || e.ColumnIndex < 0 || e.RowIndex < 0 || _cargandoCabeceras)
911 if (e.ColumnIndex == ewgridDatos.Columns[_cNomColSeleccionar].Index)
913 bool valor = Convert.ToBoolean(ewgridDatos[e.ColumnIndex, e.RowIndex].Value);
914 if (!_marcandoDesdeDetalle)
916 MarcarDesmarcarTodoElGridDeDetalle(valor);
926 void Evento_ewgridDetalle_CellClick(
object sender, DataGridViewCellEventArgs e)
930 if (e.ColumnIndex == ewgridDetalle.Columns[_cNomColSeleccionar].Index)
932 if (IsValidDetalle(e.RowIndex))
934 bool llNouEstat = !(bool)ewgridDetalle[e.ColumnIndex, e.RowIndex].Value;
935 MarcarFilaDeDetalle(e.ColumnIndex, e.RowIndex, llNouEstat);
940 _MessageBox(MotivoDetalleInvalido, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
946 void Evento_ewgridDetalle_ColumnHeaderMouseClick(
object sender, DataGridViewCellMouseEventArgs e)
948 if (e.ColumnIndex == ewgridDetalle.Columns[_cNomColSeleccionar].Index)
950 MarcarDesmarcarTodoElGridDeDetalle(_lMarcarDesmarcarDetalle);
953 _lMarcarDesmarcarDetalle = !_lMarcarDesmarcarDetalle;
958 private void MarcarDesmarcarTodoElGridDeDatos(
bool valor)
960 if (ewgridDatos != null && ewgridDatos.Rows.Count > 0)
962 int colSeleccionarIndex = ewgridDatos.Columns[_cNomColSeleccionar].Index;
963 for (
int rowIndex = 0; rowIndex < ewgridDatos.Rows.Count; rowIndex++)
965 if (valor && !IsValidCabecera(rowIndex))
967 ewgridDatos[colSeleccionarIndex, rowIndex].Value = valor;
972 private void MarcarDesmarcarTodoElGridDeDetalle(
bool valor)
974 if (ewgridDetalle != null && ewgridDetalle.Rows.Count > 0)
976 int colSeleccionarIndex = ewgridDetalle.Columns[_cNomColSeleccionar].Index;
977 for (
int rowIndex = 0; rowIndex < ewgridDetalle.Rows.Count; rowIndex++)
979 if (valor && !IsValidDetalle(rowIndex))
981 MarcarFilaDeDetalle(colSeleccionarIndex, rowIndex, valor);
987 private void MarcarFilaDeDetalle(
int colIndex,
int rowIndex,
bool valor)
989 if (ModoCapturaParaTraspaso && EsUnEscandallo(ewgridDetalle.Rows[rowIndex]))
991 string escandal = Convert.ToString(ewgridDetalle[ewgridDetalle.Columns[
"escandal"].Index, rowIndex].Value).TrimEnd();
992 if (!escandal.EndsWith(
"LIN"))
994 var escandallos = ((DataTable)ewgridDetalle.DataSource).AsEnumerable().Cast<DataRow>().Where(r => r.Field<
string>(
"escandal").StartsWith(escandal)).ToList();
995 if (escandallos.Any())
997 foreach (DataGridViewRow rowView
in ewgridDetalle.Rows)
999 foreach (DataRow escandallosRow
in escandallos)
1001 if (((DataRowView)rowView.DataBoundItem).Row == escandallosRow)
1003 rowView.Cells[_cNomColSeleccionar].Value = valor;
1004 GestionarDetallesSeleccionados(escandallosRow, valor);
1014 ewgridDetalle[colIndex, rowIndex].Value = valor;
1015 GestionarDetallesSeleccionados(((DataRowView)ewgridDetalle.Rows[rowIndex].DataBoundItem).Row, valor);
1019 EvaluarMarcarFilaCabecera();
1021 ActualizarImporteSeleccionado();
1024 private void EvaluarMarcarFilaCabecera()
1026 _marcandoDesdeDetalle =
true;
1029 bool algunoMarcado =
false;
1030 foreach (DataGridViewRow rowView
in ewgridDetalle.Rows)
1032 bool rowSeleccionado = Convert.ToBoolean(rowView.Cells[_cNomColSeleccionar].Value);
1035 algunoMarcado =
true;
1041 int colSeleccionarIndex = ewgridDatos.Columns[_cNomColSeleccionar].Index;
1042 bool valorActualCabecera = Convert.ToBoolean(ewgridDatos[colSeleccionarIndex, ewgridDatos.CurrentRow.Index].Value);
1043 if (valorActualCabecera != algunoMarcado)
1045 ewgridDatos[colSeleccionarIndex, ewgridDatos.CurrentRow.Index].Value = algunoMarcado;
1046 GestionarCabecerasSeleccionadas(((DataRowView)ewgridDatos.CurrentRow.DataBoundItem).Row, algunoMarcado);
1049 _marcandoDesdeDetalle =
false;
1052 private bool _marcandoDesdeDetalle =
false;
1054 void GestionarDetallesSeleccionados(DataRow row,
bool seleccionado)
1056 if (!ModoCapturaParaTraspaso)
return;
1058 LineaDetalleId detalleId =
new LineaDetalleId(row, DeterminarNombreDelCampoImporteDetalle());
1059 string itemKey = detalleId.GetKeyLinea();
1062 if (dicDetallesSeleccionados.ContainsKey(itemKey))
1063 dicDetallesSeleccionados[itemKey] = detalleId;
1065 dicDetallesSeleccionados.Add(itemKey, detalleId);
1069 if (dicDetallesSeleccionados.ContainsKey(itemKey))
1070 dicDetallesSeleccionados.Remove(itemKey);
1074 void GestionarCabecerasSeleccionadas(DataRow row,
bool seleccionado)
1076 if (!ModoCapturaParaTraspaso)
return;
1078 LineaCabeceraId cabeceraId =
new LineaCabeceraId(row);
1079 string itemKey = cabeceraId.GetKeyDocumento();
1082 if (dicCabecerasSeleccionadas.ContainsKey(itemKey))
1083 dicCabecerasSeleccionadas[itemKey] = cabeceraId;
1085 dicCabecerasSeleccionadas.Add(itemKey, cabeceraId);
1089 if (dicCabecerasSeleccionadas.ContainsKey(itemKey))
1090 dicCabecerasSeleccionadas.Remove(itemKey);
1094 void GestionarRecuperacionDeDetallesSeleccionados()
1096 if (!ModoCapturaParaTraspaso)
return;
1099 if(dicDetallesSeleccionados.Count > 0 && ewgridDetalle.DataSource != null && ewgridDetalle.Rows.Count > 0)
1101 var row = ((DataRowView)ewgridDetalle.Rows[0].DataBoundItem).Row;
1102 LineaDetalleId cabeceraBuscada =
new LineaDetalleId(row);
1103 var seleccionadosDelMismoDocumento = dicDetallesSeleccionados.Values.Where(v => v.GetKeyDocumento() == cabeceraBuscada.GetKeyDocumento()).ToList();
1104 if(seleccionadosDelMismoDocumento.Any())
1106 foreach (DataGridViewRow rowGridView
in ewgridDetalle.Rows)
1108 DataRowView rowView = (DataRowView)rowGridView.DataBoundItem;
1109 string key = LineaDetalleId.GetKeyLinea(rowView);
1110 if(seleccionadosDelMismoDocumento.Where(s => s.GetKeyLinea() == key).Any())
1112 ewgridDetalle[_cNomColSeleccionar, ewgridDetalle.Rows.IndexOf(rowGridView)].Value =
true;
1119 void GestionarRecuperacionDeCabecerasSeleccionadas()
1121 if (!ModoCapturaParaTraspaso)
return;
1124 if (dicCabecerasSeleccionadas.Count > 0 && ewgridDatos.DataSource != null && ewgridDatos.Rows.Count > 0)
1126 foreach (DataGridViewRow rowGridView
in ewgridDatos.Rows)
1128 DataRowView rowView = (DataRowView)rowGridView.DataBoundItem;
1129 string key = LineaCabeceraId.GetKeyDocumento(rowView);
1130 var seleccionadosDelMismoDocumento = dicCabecerasSeleccionadas.Values.Where(v => v.GetKeyDocumento() == key).ToList();
1131 if (seleccionadosDelMismoDocumento.Any())
1133 ewgridDatos[_cNomColSeleccionar, ewgridDatos.Rows.IndexOf(rowGridView)].Value =
true;
1139 Dictionary<string, LineaCabeceraId> dicCabecerasSeleccionadas =
new Dictionary<string, LineaCabeceraId>();
1140 Dictionary<string, LineaDetalleId> dicDetallesSeleccionados =
new Dictionary<string, LineaDetalleId>();
1142 class LineaCabeceraId : IComparable<LineaCabeceraId>
1144 readonly
string _empresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
1145 string _documento =
string.Empty;
1146 string _proveedor =
string.Empty;
1148 public LineaCabeceraId(DataRow row)
1150 _documento = row.Field<
string>(
"documento");
1151 _proveedor = row.Field<
string>(
"proveedor");
1154 public int CompareTo(LineaCabeceraId other)
1159 int comparacionEmpresa = _empresa.CompareTo(other._empresa);
1160 if (comparacionEmpresa == 0)
1162 int comparacionProveedor = _proveedor.CompareTo(other._proveedor);
1163 if (comparacionProveedor == 0)
1165 return _documento.CompareTo(other._documento);
1168 return comparacionProveedor;
1171 return comparacionEmpresa;
1174 public string GetKeyDocumento()
1176 return $
"--||{_empresa}||{_proveedor}||{_documento}||--";
1179 public static string GetKeyDocumento(DataRowView rowView)
1181 string empresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
1182 string proveedor = rowView.Row.Field<
string>(
"proveedor");
1183 string documento = rowView.Row.Field<
string>(
"documento");
1184 return $
"--||{empresa}||{proveedor}||{documento}||--";
1187 public string GetEmpresa()
1192 public string GetProveedor()
1197 public string GetDocumento()
1203 class LineaDetalleId : IComparable<LineaDetalleId>
1205 readonly
string _empresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
1206 string _documento =
string.Empty;
1207 string _proveedor =
string.Empty;
1212 public decimal
Importe = decimal.Zero;
1214 public LineaDetalleId(DataRow row,
string campoImporte =
"")
1216 _documento = row.Field<
string>(
"documento");
1217 _proveedor = row.Field<
string>(
"proveedor");
1219 _linia = row.Field<
int>(
"linia");
1221 if (!
string.IsNullOrWhiteSpace(campoImporte))
1222 Importe = row.Field<decimal>(campoImporte);
1225 public int CompareTo(LineaDetalleId other)
1230 int comparacionEmpresa = _empresa.CompareTo(other._empresa);
1231 if (comparacionEmpresa == 0)
1233 int comparacionProveedor = _proveedor.CompareTo(other._proveedor);
1234 if (comparacionProveedor == 0)
1236 int comparacionDocumento = _documento.CompareTo(other._documento);
1237 if (comparacionDocumento == 0)
1239 return _linia.CompareTo(other._linia);
1242 return comparacionDocumento;
1245 return comparacionProveedor;
1248 return comparacionEmpresa;
1251 public string GetKeyDocumento()
1253 return $
"--||{_empresa}||{_proveedor}||{_documento}||--";
1256 public string GetKeyLinea()
1258 return $
"--||{_empresa}||{_proveedor}||{_documento}||{_linia.ToString()}||--";
1261 public static string GetKeyDocumento(DataRowView rowView)
1263 string empresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
1264 string proveedor = rowView.Row.Field<
string>(
"proveedor");
1265 string documento = rowView.Row.Field<
string>(
"documento");
1266 return $
"--||{empresa}||{proveedor}||{documento}||--";
1269 public static string GetKeyLinea(DataRowView rowView)
1271 string empresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
1272 string proveedor = rowView.Row.Field<
string>(
"proveedor");
1273 string documento = rowView.Row.Field<
string>(
"documento");
1274 string linia = rowView.Row.Field<
int>(
"linia").ToString();
1276 return $
"--||{empresa}||{proveedor}||{documento}||{linia}||--";
1279 public string GetEmpresa()
1284 public string GetProveedor()
1289 public string GetDocumento()
1294 public int GetLinia()
1300 private bool IsValidCabecera(
int indexRow)
1302 MotivoCabeceraInvalida =
string.Empty;
1304 if (!ModoCapturaParaTraspaso)
1307 bool esValido =
true;
1308 if(ewgridDatos.Columns.Contains(
"cancelado") && Convert.ToBoolean(ewgridDatos[ewgridDatos.Columns[
"cancelado"].Index, indexRow].Value) ==
true)
1310 MotivoCabeceraInvalida =
"No se pueden seleccionar documentos cancelados.";
1313 if (ewgridDatos.Columns.Contains(
"traspasado") && Convert.ToBoolean(ewgridDatos[ewgridDatos.Columns[
"traspasado"].Index, indexRow].Value) ==
true)
1315 MotivoCabeceraInvalida =
"No se pueden seleccionar documentos traspasados.";
1321 string MotivoCabeceraInvalida =
string.Empty;
1322 string MotivoDetalleInvalido =
string.Empty;
1324 private bool IsValidDetalle(
int indexRow)
1326 MotivoDetalleInvalido =
string.Empty; ;
1328 if (!ModoCapturaParaTraspaso)
1331 bool esValido =
true;
1332 if (ewgridDetalle.Columns.Contains(
"cancelado") && Convert.ToBoolean(ewgridDetalle[ewgridDetalle.Columns[
"cancelado"].Index, indexRow].Value) ==
true)
1334 MotivoDetalleInvalido =
"No se pueden seleccionar líneas canceladas.";
1338 if (ewgridDatos.Columns.Contains(
"cancelado") && Convert.ToBoolean(ewgridDatos[ewgridDatos.Columns[
"cancelado"].Index, ewgridDatos.CurrentRow.Index].Value) ==
true)
1340 MotivoDetalleInvalido =
"No se pueden seleccionar lineas que pertenecen a documentos cancelados.";
1344 if (ewgridDetalle.Columns.Contains(
"traspasado") && Convert.ToBoolean(ewgridDetalle[ewgridDetalle.Columns[
"traspasado"].Index, indexRow].Value) ==
true)
1346 MotivoDetalleInvalido =
"No se pueden seleccionar líneas traspasadas.";
1350 if (ewgridDatos.Columns.Contains(
"traspasado") && Convert.ToBoolean(ewgridDatos[ewgridDatos.Columns[
"traspasado"].Index, ewgridDatos.CurrentRow.Index].Value) ==
true)
1352 MotivoDetalleInvalido =
"No se pueden seleccionar lineas que pertenecen a documentos traspasados.";
1357 if (ewgridDetalle.Columns.Contains(
"servidas") && Convert.ToDecimal(ewgridDetalle[ewgridDetalle.Columns[
"servidas"].Index, indexRow].Value) != decimal.Zero)
1359 MotivoDetalleInvalido =
"No se pueden seleccionar líneas con unidades servidas.";
1362 if (ewgridDetalle.Columns.Contains(
"escandal") && !
String.IsNullOrWhiteSpace(Convert.ToString(ewgridDetalle[ewgridDetalle.Columns[
"escandal"].Index, indexRow].Value)))
1365 string escandal = Convert.ToString(ewgridDetalle[ewgridDetalle.Columns[
"escandal"].Index, indexRow].Value).TrimEnd();
1366 if(escandal.EndsWith(
"LIN"))
1368 MotivoDetalleInvalido =
"No se pueden seleccionar individualmente líneas de componentes.";
1376 private bool EsUnEscandallo(DataGridViewRow row)
1378 if (ewgridDetalle.Columns.Contains(
"escandal") && !
String.IsNullOrWhiteSpace(Convert.ToString(row.Cells[
"escandal"].Value)))
1380 string escandal = Convert.ToString(row.Cells[
"escandal"].Value);
1381 if (escandal.ToUpper().EndsWith(
"TYC"))
1391 private bool EsEscandalloDeDefinicionAmpliada(
string tcEscandal)
1394 return tcEscandal.ToUpper().EndsWith(
"AMP") || tcEscandal.ToUpper().StartsWith(
"AMP");
1400 private void _Configurar_Grid_Detalle()
1402 bool llPaso =
false;
1404 if (ewgridDetalle.Columns.Contains(
"talla")) ewgridDetalle.Columns[
"talla"].Visible = _lColor;
1405 if (ewgridDetalle.Columns.Contains(
"color")) ewgridDetalle.Columns[
"color"].Visible = _lColor;
1406 if (ewgridDetalle.Columns.Contains(
"cajas")) ewgridDetalle.Columns[
"cajas"].Visible = _lCajas;
1407 if (ewgridDetalle.Columns.Contains(
"peso")) ewgridDetalle.Columns[
"peso"].Visible = _lPeso;
1409 if (ewgridDetalle.Columns.Contains(
"nombre_articulo"))
1413 if(ewgridDetalle.Columns.Contains(
"definicion"))
1414 ewgridDetalle.Columns[
"nombre_articulo"].Visible =
false;
1416 ewgridDetalle.Columns[
"nombre_articulo"].HeaderText =
"Definición";
1421 List<string> lisColumnasInvisibles =
new List<string>() {
"proveedor",
"nombre_proveedor",
"tipo_iva",
"preciodiv",
"importediv",
"importeiva",
"importepte",
"refercli",
1422 "familia",
"subfamilia",
"cajaserv",
"pendientes",
"escandal",
"linia" };
1423 CambiarVisibilidadColumnas(lisColumnasInvisibles,
false, ref ewgridDetalle);
1425 if (ModoCapturaParaTraspaso)
1426 ewgridDetalle.Columns[_cNomColSeleccionar].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
1428 _ConfigurarGridDivisa(_ListadoDetalle, ref ewgridDetalle);
1430 if (ewgridDetalle.Columns.Contains(
"definicion"))
1432 ewgridDetalle.Columns[
"definicion"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
1433 ewgridDetalle.Columns[
"definicion"].MinimumWidth = 80;
1437 if (ewgridDetalle.Columns.Contains(
"nombre_articulo"))
1439 ewgridDetalle.Columns[
"nombre_articulo"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
1440 ewgridDetalle.Columns[
"nombre_articulo"].MinimumWidth = 80;
1445 _ConfigurarColumnaNumerica(
"peso", _oMascaraPeso.
_Mascara_Net, ref ewgridDetalle);
1446 _ConfigurarColumnaNumerica(
"unidades", _oMascaraUnidades.
_Mascara_Net, ref ewgridDetalle, _cDesUnidades);
1447 _ConfigurarColumnaNumerica(
"servidas", _oMascaraUnidades.
_Mascara_Net, ref ewgridDetalle);
1448 _ConfigurarColumnaNumerica(
"precio", _oMascaraPrecio.
_Mascara_Net, ref ewgridDetalle);
1449 _ConfigurarColumnaNumerica(
"dto1", _oMascaraPorcent.
_Mascara_Net, ref ewgridDetalle);
1450 _ConfigurarColumnaNumerica(
"dto2", _oMascaraPorcent.
_Mascara_Net, ref ewgridDetalle);
1451 _ConfigurarColumnaNumerica(
"importe", _oMascaraImport.
_Mascara_Net, ref ewgridDetalle);
1452 _ConfigurarColumnaNumerica(
"cajas", _oMascaraCajas.
_Mascara_Net, ref ewgridDetalle, _cDesCajas,
false);
1455 if (ewgridDetalle.Columns.Contains(
"documento"))
1457 ewgridDetalle.Columns[
"documento"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
1458 ewgridDetalle.Columns[
"documento"].Width = 80;
1462 ewgridDetalle.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
1464 ewgridDetalle.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
1467 _Nombre_Columnas(ref ewgridDetalle);
1469 ewgridDetalle.AutoSizeColumnsMode = ewgridDetalle.Rows.Count > 0 ? DataGridViewAutoSizeColumnsMode.Fill : DataGridViewAutoSizeColumnsMode.DisplayedCells;
1472 if (!ewgridDetalle.Columns.Contains(
"traspasado"))
1474 DataGridViewCheckBoxColumn CBColumn =
new DataGridViewCheckBoxColumn
1476 Name =
"traspasado",
1477 HeaderText =
"Traspasado",
1481 if (ewgridDetalle.Columns.Contains(
"servidas"))
1483 ewgridDetalle.Columns.Insert(ewgridDetalle.Columns[
"servidas"].Index + 1, CBColumn);
1484 ewgridDetalle.Columns[
"traspasado"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
1489 ewgridDetalle.CellFormatting +=
new DataGridViewCellFormattingEventHandler(ExtensionesGrids.__Grid_CellFormatting);
1499 private void CambiarVisibilidadColumnas(IEnumerable<string> tlisColumnas,
bool tlVisible, ref
ewgrid toGrid)
1501 foreach (var nombreColumna
in tlisColumnas)
1503 if (toGrid.Columns.Contains(nombreColumna))
1504 toGrid.Columns[nombreColumna].Visible = tlVisible;
1513 base.OnRefrescarClick();
1523 private void EwgridDatos_SelectionChanged(
object sender, EventArgs e)
1525 if (ewgridDatos.CurrentCell == null)
1528 string lcNumero =
"";
1530 if (ewgridDatos.SelectedRows.Count > 0)
1531 lnRowAct = ewgridDatos.SelectedRows[0].Index;
1533 lnRowAct = ewgridDatos.CurrentCell.RowIndex;
1535 lcNumero = ewgridDatos[
"Documento", lnRowAct].Value.ToString();
1536 if (_UltimoDocumentoSeleccionado != lcNumero)
1538 _UltimoDocumentoSeleccionado = lcNumero;
1539 _Refrescar_Detalle(lcNumero);
1549 void EwgridDatos_CellMouseDoubleClick(
object sender, DataGridViewCellMouseEventArgs e)
1551 if (ModoCapturaParaTraspaso)
1552 NavegarDocumento(e.RowIndex);
1554 BtNavegar_Click(null, null);
1557 private void LbDetalle_Click(
object sender, EventArgs e)
1559 scDatos.Panel1Collapsed = !scDatos.Panel1Collapsed;
1560 toolTipEW.SetToolTip(lbDetalle, (scDatos.Panel1Collapsed ?
"Minimizar" :
"Maximizar") +
" detalle");
1563 private void LbDocumentos_Click(
object sender, EventArgs e)
1565 scDatos.Panel2Collapsed = !scDatos.Panel2Collapsed;
1566 toolTipEW.SetToolTip(lbDocumentos, (scDatos.Panel2Collapsed ?
"Minimizar" :
"Maximizar") +
" documentos");
1574 private void ScDatos_Paint(
object sender, PaintEventArgs e)
1576 if (sender is SplitContainer scSplit)
1578 Pen loPen =
new Pen(
Color.DimGray, 30);
1581 int lnBottom = scSplit.Height - 10;
1582 int lnLeft = scSplit.Width / 2;
1584 e.Graphics.DrawLine(loPen, lnLeft, lnTop, lnLeft, lnBottom);
1596 if (_lSeleccion_Multiple && _lis_Seleccion_Multiple_Campos != null && _lis_Seleccion_Multiple_Campos.Count > 0)
1598 IEnumerable<DataGridViewRow> ldgrRowsSeleccionats =
1599 from DataGridViewRow ldgrRow in ewgridDatos.Rows
1600 where (
bool)ldgrRow.Cells[_cNomColSeleccionar].Value ==
true 1604 foreach (DataGridViewRow ldgrRow
in ldgrRowsSeleccionats)
1607 Dictionary<string, object> ldicCampos =
new Dictionary<string,object>();
1610 foreach (
string lcNombreCampo
in _lis_Seleccion_Multiple_Campos)
1612 if (ewgridDatos.Columns.Contains(lcNombreCampo))
1614 ldicCampos.Add(lcNombreCampo, ewgridDatos[lcNombreCampo, ldgrRow.Index].Value);
1619 ldicCampos.Add(lcNombreCampo, null);
1625 _lis_Seleccion_Multiple_Resultados.Add(ldicCampos);
1628 btSalir1.PerformClick();
1632 if (ewgridDatos.CurrentCell == null)
1634 _MessageBox(
"Debe seleccionar el documento al que desea navegar.", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, DialogResult.OK);
1639 int lnRowAct = ewgridDatos.CurrentCell.RowIndex;
1641 if (ModoCapturaParaTraspaso)
1642 NavegarDocumento(lnRowAct);
1645 _Numero = ewgridDatos[
"Documento", lnRowAct].Value.ToString();
1647 if (ewgridDatos.Columns.Contains(
"Factura"))
1648 _Factura = ewgridDatos[
"Factura", lnRowAct].Value.ToString();
1649 else if (_Cabeceras is listados.Listados.FacturasProveedor)
1652 if (
string.IsNullOrWhiteSpace(_Numero))
1656 if(String.IsNullOrWhiteSpace(_Proveedor) && ewgridDatos.Columns.Contains(
"Proveedor"))
1659 _Proveedor = ewgridDatos[
"Proveedor", lnRowAct].Value.ToString();
1662 btSalir1.PerformClick();
1687 private void EwgridDetalle_RowPrePaint(
object sender, DataGridViewRowPrePaintEventArgs e)
1689 string lcDefinicion = ewgridDetalle.Columns.Contains(
"definicion") ? ewgridDetalle[
"definicion", e.RowIndex].Value.ToString() : String.Empty;
1690 string lcTipoIva = ewgridDetalle.Columns.Contains(
"tipo_iva") ? ewgridDetalle[
"tipo_iva", e.RowIndex].Value.ToString() : String.Empty;
1692 if (!
string.IsNullOrWhiteSpace(lcDefinicion) &&
string.IsNullOrWhiteSpace(lcTipoIva))
1695 loFont =
new Font(ewgridDetalle.DefaultCellStyle.Font, FontStyle.Italic);
1697 ewgridDetalle.Rows[e.RowIndex].Cells[
"Definicion"].Style.Font = loFont;
1698 ewgridDetalle.Rows[e.RowIndex].DefaultCellStyle.ForeColor =
Color.Blue;
1708 panelTrasp.Visible = tlShow;
1717 panelCancel.Visible = tlShow;
1726 panelFacturados.Visible = tlShow;
1738 private void Generic_CheckedChanged(
object sender, EventArgs e)
1742 _lLastSelectedIndex = 0;
1752 base.OnDivisaChanged();
1754 ActualizarEtiquetaSimboloDivisa();
1760 private void ActualizarEtiquetaSimboloDivisa()
1763 lblSimboloDivisa.Text = _ObtenerSimboloDivisa();
1765 lblSimboloDivisa.Text =
"";
1768 private void InicializarModoCapturaParaTraspaso()
1773 if(ModoCapturaParaTraspaso)
1775 PanelCapturaParaTraspaso.Visible =
true;
1776 PanelCapturaParaTraspasoInfo.Visible =
true;
1777 PanelCapturaParaTraspasoInfo.Location =
new Point(PanelCapturaParaTraspasoInfo.Location.X, (scDatos.Location.Y + scDatos.Height + 3));
1778 _lSeleccion_Multiple =
false;
1779 btSalir1.Text =
@"&Cancelar";
1780 btSalir1.Size =
new Size(120, btSalir1.Height);
1785 btCapturarParaTraspaso._PropiedadesDeEstilos =
new ewbuttonEstilosBase(btCapturarParaTraspaso);
1786 btCapturarParaTraspaso._PropiedadesDeEstilos._CargarEstilo(
"sage.ew.botones.btDocAceptar");
1790 rbTrasp1.Checked =
true;
1791 if (!LosDocumentosOrigenSonDepositos())
1792 rbCancel1.Checked =
true;
1795 btListar.Visible =
false;
1796 btImprimir1.Visible =
false;
1801 PanelCapturaParaTraspaso.Visible =
false;
1802 PanelCapturaParaTraspasoInfo.Visible =
false;
1803 btSalir1.Text =
@"&Salir";
1804 btSalir1.Size =
new Size(120, btSalir1.Height);
1808 private void BtCapturarParaTraspaso_Click(
object sender, EventArgs e)
1810 if(_DocumentoOrigen._EnUso)
1812 NotificarAlUsuario(
"No se permite traspasar líneas a un documento en uso.");
1816 if (dicDetallesSeleccionados.Count > 0)
1818 var linkForm = _DocumentoOrigen._oForm;
1819 _DocumentoOrigen._oForm = null;
1821 bool ejecutado = EjecutarCapturaParaTraspaso();
1823 _DocumentoOrigen._oForm = linkForm;
1825 _Numero = _DocumentoOrigen._Numero;
1826 _Proveedor = _DocumentoOrigen._Cabecera._Proveedor;
1836 NotificarAlUsuario(
"No se han seleccionado líneas para la operación de traspaso");
1844 private bool EjecutarCapturaParaTraspaso()
1846 Queue<LineaDetalleId> documentosDistintos = ObtenerIdsDeDocumentosOrigen();
1848 _UsarDivisa = TrabajarTraspasoConDivisa();
1850 if (!TengoDocumentoDestino() || !TengoDestinatario())
1853 LineaDetalleId primerDocumento = documentosDistintos.Peek();
1854 if (!EstablecerDatosDestinoDesdePrimerElemento(primerDocumento))
1856 string mensajeError =
"No se ha podido crear el documento destino.";
1857 if (!
string.IsNullOrWhiteSpace(_DocumentoOrigen._Mensaje_Error))
1858 mensajeError = _DocumentoOrigen._Mensaje_Error;
1859 NotificarAlUsuario(mensajeError);
1866 if (!
string.IsNullOrWhiteSpace(_DocumentoOrigen._Cabecera._Factura))
1868 NotificarAlUsuario(
"No se permite traspasar líneas a un documento ya facturado");
1874 if (_DocumentoOrigen._Solo_Lectura)
1876 string mensajeError =
"No se permite traspasar líneas a un documento de sólo lectura.";
1877 if (!
string.IsNullOrWhiteSpace(_DocumentoOrigen._Mensaje_Error))
1878 mensajeError = _DocumentoOrigen._Mensaje_Error;
1879 NotificarAlUsuario(mensajeError);
1883 List<dynamic> documentosOrigen =
new List<dynamic>();
1884 while (documentosDistintos.Count > 0)
1886 LineaDetalleId idDocumentoOrigen = documentosDistintos.Dequeue();
1887 documentosOrigen.Add(PrepararDocumentoOrigenTraspasoLineas(idDocumentoOrigen));
1891 if (documentosOrigen.Any())
1893 string divisaDocumentos = documentosOrigen.First()._Cabecera._Divisa;
1894 string divisaDestino = _DocumentoOrigen._Cabecera._Divisa;
1895 if (!divisaDestino.Equals(divisaDocumentos))
1897 NotificarAlUsuario(
"El documento destino tiene una divisa distinta. " + Environment.NewLine +
"Este tipo de traspasos no están permitidos.");
1902 if (LosDocumentosOrigenContienenDocumentosEnUso(documentosOrigen, out
string documentosEnUso))
1904 string mensaje =
"No se permite traspasar desde documentos en uso. " + Environment.NewLine +
"Documentos en uso:" + Environment.NewLine + documentosEnUso;
1905 NotificarAlUsuario(mensaje);
1910 GestionDeObras(documentosOrigen);
1913 GestionDeObservaciones(documentosOrigen);
1916 if (!documentosOrigen.All(d => ValidarMismoProveedor(d, _DocumentoOrigen)))
1918 NotificarAlUsuario(
"No se permite traspasar líneas de distintos proveedores a un mismo documento");
1923 if (documentosOrigen.All(d => ValidarCompatibilidadOrigenDestino(d, _DocumentoOrigen)))
1925 documentosOrigen.ForEach(d => EjecutarTraspsasoDocumento(d));
1928 AsignarObservaciones();
1930 _DocumentoOrigen._SaveData();
1936 private bool LosDocumentosOrigenContienenDocumentosEnUso(List<dynamic> documentosOrigen, out
string documentosEnUso)
1938 documentosEnUso =
string.Empty;
1943 string detalleDocumentosEnUso =
string.Empty;
1944 enUso.ForEach(d => detalleDocumentosEnUso += $
"Proveedor {d._Cabecera._Proveedor} - '{d._Numero}' {Environment.NewLine}");
1945 documentosEnUso = detalleDocumentosEnUso;
1952 private void NotificarAlUsuario(
string mensaje)
1954 _MessageBox(mensaje, MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
1957 void EjecutarTraspsasoDocumento(dynamic documentoOrigen)
1959 Dictionary<string, object> loDicParamTraspaso =
new Dictionary<string, object>();
1962 string lcNumDocDestino =
string.Empty;
1965 loDicParamTraspaso.Add(
"fecha", DateTime.Today);
1966 loDicParamTraspaso.Add(
"proveedor", _DocumentoOrigen._Cabecera._Proveedor);
1973 string operario = _DocumentoOrigen._Cabecera._Operario;
1974 if (
string.IsNullOrWhiteSpace(operario))
1976 operario = documentoOrigen._Cabecera._Operario;
1977 _DocumentoOrigen._Cabecera._Operario = operario;
1980 loDicParamTraspaso.Add(
"operario", documentoOrigen._Cabecera._Operario);
1985 DocumentoConObra(documentoOrigen) &&
1988 loDicParamTraspaso.Add(
"obra", _DocumentoOrigen._Cabecera._Obra = documentoOrigen._Cabecera._Obra);
1989 _obraTraspasada =
true;
1995 string formaDePago = _DocumentoOrigen._Cabecera._FormaPago;
1997 if (
string.IsNullOrWhiteSpace(formaDePago))
1999 formaDePago = documentoOrigen._Cabecera._FormaPago;
2000 _DocumentoOrigen._Cabecera._FormaPago = formaDePago;
2003 loDicParamTraspaso.Add(
"formapago", formaDePago);
2007 loDicParamTraspaso.Add(
"almacen", _DocumentoOrigen._Cabecera._Almacen);
2009 loDicParamTraspaso.Add(
"numero", _DocumentoOrigen._Numero);
2013 loDicParamTraspaso.Add(
"divisa", DivisaDocumento());
2014 loDicParamTraspaso.Add(
"cambio", _DocumentoOrigen._Cabecera._Cambio);
2015 loDicParamTraspaso.Add(
"actualizarcambio",
false);
2018 loDicParamTraspaso.Add(
"docudestino", _DocumentoOrigen);
2020 TratamientoExtensiones(documentoOrigen);
2022 lcNumDocDestino = documentoOrigen._To_Albaran(loDicParamTraspaso);
2025 private void TratamientoExtensiones(dynamic documentoOrigen)
2027 foreach (dynamic linea
in documentoOrigen._Lineas)
2029 if (linea._TraspasarLinea)
2031 decimal lnMaxUdsTraspaso = linea._Unidades;
2032 linea._Traspaso = lnMaxUdsTraspaso;
2034 ExtensionesTraspasoAutomatico(linea, ((ewDocCompraALBARAN)_DocumentoOrigen)._Cabecera._Almacen, ((ewDocCompraALBARAN)_DocumentoOrigen)._Fecha, ref lnMaxUdsTraspaso);
2036 if (lnMaxUdsTraspaso != linea._Unidades)
2038 ExtensionesCancelar(linea);
2039 linea._Traspaso = 0M;
2040 linea._TraspasarLinea =
false;
2042 _MessageBox(
"Sólo se permite traspasar las líneas informadas en su totalidad.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, DialogResult.None);
2056 if (toLinea is ewDocCompraLinDEPOSITO || toLinea is ewDocCompraLinPEDIDO || toLinea is ewDocCompraLinPROPUESTA)
2058 (
new TraspasoComprasExtendido(toLinea))._CancelarTraspaso(toLinea);
2070 private void ExtensionesTraspasoAutomatico(
IDocCompraLin toLinea,
string tcAlmacen, DateTime tdFecha, ref decimal toValor)
2072 if (
string.IsNullOrWhiteSpace(toLinea.
_TipoIva))
return;
2077 private bool ValidarMismoProveedor(dynamic documentoOrigen, dynamic documentoDestino)
2079 return documentoOrigen._Cabecera.
_Proveedor.TrimEnd() == _DocumentoOrigen._Cabecera._Proveedor.TrimEnd();
2082 private bool ValidarCompatibilidadOrigenDestino(dynamic documentoOrigen, dynamic documentoDestino)
2084 Dictionary<string, object> loDicResultado =
new Dictionary<string, object>();
2085 bool ejecucionCorrecta =
false;
2086 string mensajeDeError =
"";
2090 loDicResultado = documentoOrigen._Traspaso_DocDestino_Existente_Compatible(documentoDestino);
2092 ejecucionCorrecta = Convert.ToBoolean(loDicResultado[
"ok"]);
2094 if (!ejecucionCorrecta)
2096 mensajeDeError = Convert.ToString(loDicResultado[
"mensajeerror"]);
2097 NotificarAlUsuario(mensajeDeError);
2099 return ejecucionCorrecta;
2102 private bool EstablecerDatosDestinoDesdePrimerElemento(LineaDetalleId primerDocumento)
2104 bool documentoDestinoDeNuevaCreacion =
false;
2106 if (_DocumentoOrigen == null)
2107 _DocumentoOrigen =
new ewDocCompraALBARAN();
2109 dynamic documentoOrigenTraspaso = CargarDocumento(primerDocumento);
2111 if (
string.IsNullOrWhiteSpace(_DocumentoOrigen._Numero))
2113 CrearDocumento(documentoOrigenTraspaso);
2114 documentoDestinoDeNuevaCreacion =
true;
2121 _DocumentoOrigen._Cabecera._Proveedor = documentoOrigenTraspaso._Cabecera._Proveedor;
2125 string operarioDestino = documentoDestinoDeNuevaCreacion ?
"" : _DocumentoOrigen._Cabecera._Operario;
2126 if (
string.IsNullOrWhiteSpace(operarioDestino))
2128 string operario = documentoOrigenTraspaso._Cabecera._Operario;
2129 if (
string.IsNullOrWhiteSpace(operario))
2130 operario = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_OperarioTPV"));
2131 _DocumentoOrigen._Cabecera._Operario = operario;
2136 _DocumentoOrigen._Cabecera._Obra = documentoOrigenTraspaso._Cabecera._Obra;
2140 string formaDePago = documentoOrigenTraspaso._Cabecera._FormaPago;
2141 if(
string.IsNullOrWhiteSpace(formaDePago))
2144 formaDePago = ((ewDocCompraALBARAN)_DocumentoOrigen)._Cabecera._oProv._FormaPago;
2146 _DocumentoOrigen._Cabecera._FormaPago = formaDePago;
2151 string almacenDestino = documentoDestinoDeNuevaCreacion ?
"" : _DocumentoOrigen._Cabecera._Almacen;
2152 if (
string.IsNullOrWhiteSpace(almacenDestino))
2154 string almacen = documentoOrigenTraspaso._Cabecera._Almacen;
2155 if (
string.IsNullOrWhiteSpace(almacen))
2156 almacen = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_almacen"));
2157 _DocumentoOrigen._Cabecera._Almacen = almacen;
2164 private void CrearDocumento(dynamic documentoOrigenTraspaso)
2166 string empresa = Convert.ToString(EW_GLOBAL._GetVariable(
"wc_empresa"));
2167 string proveedor = documentoOrigenTraspaso._Cabecera._Proveedor;
2168 ((ewDocCompraALBARAN)_DocumentoOrigen)._New(empresa, tcProveedor: proveedor);
2171 private Queue<LineaDetalleId> ObtenerIdsDeDocumentosOrigen()
2174 Queue<LineaDetalleId> documentosDistintos =
new Queue<LineaDetalleId>();
2175 LineaDetalleId oldLinea = null;
2176 foreach (var currentLinea
in dicDetallesSeleccionados.Values)
2178 if (oldLinea == null || currentLinea.GetKeyDocumento() != oldLinea.GetKeyDocumento())
2180 documentosDistintos.Enqueue(currentLinea);
2181 oldLinea = currentLinea;
2184 return documentosDistintos;
2187 private dynamic PrepararDocumentoOrigenTraspasoLineas(LineaDetalleId idDeDocumento)
2190 var lineas = dicDetallesSeleccionados.Values.Where(l => l.GetDocumento() == idDeDocumento.GetDocumento()).ToList();
2192 dynamic documentoOrigen = CargarDocumento(idDeDocumento);
2200 int numeroDeLinea = l.GetLinia();
2201 var linea = ObtenerLinea(documentoOrigen, numeroDeLinea);
2202 linea._Traspasar_Unidades = linea._Unidades;
2203 linea._Traspasar_Cajas = linea._Cajas;
2204 linea._Traspasar_Peso = linea._Peso;
2205 linea._Traspasar_Extensiones = null;
2206 if (LosDocumentosOrigenSonDepositos())
2212 tlFormularioPadreVisible:
false));
2214 linea._TraspasarLinea =
true;
2220 throw new NotImplementedException();
2223 return documentoOrigen;
2226 dynamic ObtenerLinea(dynamic documento,
int numero)
2228 foreach (var linea
in documento._Lineas)
2230 if (linea._Linea == numero)
2240 private string DivisaDocumento()
2242 if (_DocumentoOrigen != null)
2243 return _DocumentoOrigen._Cabecera._Divisa;
2245 return ((
Divisa)EW_GLOBAL._Moneda)._Codigo;
2252 private bool TrabajarTraspasoConDivisa()
2254 string nombreOpcFlag = _DocumentoOrigen._TipoDocumentoGeneral !=
eTipoDocumentoGeneral.Compras ?
"wl_divisaventa" :
"wl_divisacompra";
2255 if (Convert.ToBoolean(EW_GLOBAL._GetVariable(nombreOpcFlag,
false)) ==
true)
2257 return DivisaDocumento() != ((
Divisa)EW_GLOBAL._Moneda)._Codigo;
2265 private bool _UsarDivisa =
false;
2267 private dynamic CargarDocumento(LineaDetalleId linea)
2270 dynamic documento = GetNewInstanciaDocumento();
2272 documento._Load(linea.GetEmpresa(), linea.GetDocumento(), linea.GetProveedor());
2276 private dynamic CargarDocumento(LineaCabeceraId linea)
2279 dynamic documento = GetNewInstanciaDocumento();
2281 documento._Load(linea.GetEmpresa(), linea.GetDocumento(), linea.GetProveedor());
2285 private dynamic GetNewInstanciaDocumento()
2289 switch (TipoDeDocumentoCapturable)
2292 documento =
new ewDocCompraPEDIDO();
2295 documento =
new ewDocCompraPROPUESTA();
2298 documento =
new ewDocCompraDEPOSITO();
2301 throw new NotSupportedException(
"Tipo de líneas a capturar no soportadas");
2307 private void NavegarDocumento(
int index)
2312 LineaCabeceraId cabecera =
new LineaCabeceraId(((DataRowView)ewgridDatos.Rows[index].DataBoundItem).Row);
2313 CargarDocumento(cabecera)._Show();
2316 private bool TengoDocumentoDestino()
2318 return (_DocumentoOrigen != null && !
string.IsNullOrWhiteSpace(_DocumentoOrigen._Numero));
2321 private bool TengoDestinatario()
2323 return (_DocumentoOrigen != null && !
string.IsNullOrWhiteSpace(_DocumentoOrigen._Cabecera._Proveedor));
2326 private bool LosDocumentosOrigenSonDepositos()
2331 #region Gestión de obras 2333 private bool _traspasarObra =
false;
2334 private bool _obraTraspasada =
false;
2336 private void GestionDeObras(List<dynamic> documentosOrigen)
2339 bool obraEnDestino = DocumentoConObra(_DocumentoOrigen);
2342 _traspasarObra =
false;
2347 int conObras = documentosOrigen.Where(d => DocumentoConObra(d)).ToList().Count;
2352 _traspasarObra =
false;
2357 _traspasarObra =
true;
2360 private bool DocumentoConObra(dynamic documento)
2362 return !
string.IsNullOrWhiteSpace(documento._Cabecera._Obra);
2365 #endregion Gestión de obras 2367 #region Gestión de observaciones 2369 private bool _traspasarObservaciones =
false;
2370 private string _observacionesConcatenadas =
string.Empty;
2372 private void GestionDeObservaciones(List<dynamic> documentosOrigen)
2375 _traspasarObservaciones =
false;
2376 _observacionesConcatenadas =
string.Empty;
2379 bool observacionesEnDestino = DocumentoConObservaciones(_DocumentoOrigen);
2380 if (observacionesEnDestino)
2382 _traspasarObservaciones =
false;
2387 var conObservaciones = documentosOrigen.Where(d => DocumentoConObservaciones(d)).ToList();
2390 if (conObservaciones.Any())
2393 _traspasarObservaciones =
true;
2396 if (conObservaciones.Count == 1)
2398 _observacionesConcatenadas = GetObservacionesDocumento(conObservaciones.First());
2402 conObservaciones.ForEach(d => _observacionesConcatenadas += GetObservacionesDocumentoConTratamientoRTF(d));
2407 _traspasarObservaciones =
false;
2411 private void AsignarObservaciones()
2413 if (_traspasarObservaciones)
2415 _DocumentoOrigen._Cabecera._Observacio = _observacionesConcatenadas;
2419 private string GetObservacionesDocumento(dynamic documento)
2421 return documento._Cabecera._Observacio + Environment.NewLine;
2424 private string GetObservacionesDocumentoConTratamientoRTF(dynamic documento)
2426 string observacion = documento._Cabecera._Observacio;
2428 if (observacion.Contains(
@"\rtf"))
2430 RichTextBox controlRtf =
new RichTextBox
2434 observacion = controlRtf.Text;
2437 return (observacion + Environment.NewLine);
2440 private bool DocumentoConObservaciones(dynamic documento)
2442 return !
string.IsNullOrWhiteSpace(documento._Cabecera._Observacio);
2445 #endregion Gestión de observaciones
Parametros de traspaso extendidos (compras y ventas)
override string Text
Obtiene o establece el texto que se mostrará en el control
Classe empresa basada en sage.ew.ewmante
override string _Nombre
Nombre del proveedor a partir del campo NOMBRE de la tabla PROVEED de la base de datos de GESTION de ...
string _Proveedor
Código de proveedor
string _Get(string tcId, string tcDefaultValue="")
Devuelve la traducción de un string
static bool _EsDivisaEmpresa(string tcCodigoDivisa)
Método que informa de si es la misma divisa que la empresa
Dictionary< string, object > _Filtros
Diccionario con los filtros que espera el método _DataTable Esta propiedad se actualizará a partir de...
bool _Control_Obra
Si se permite la declaración de obra (caso de estar activado el opcflag de trabajar con obras) para p...
Clase parcial para listados, en esta definición se especificarán los métodos comunes para las demás c...
static string _GetNombreEmpresa(string tcCodigoEmpresa="")
Obtiene el nombre de la empresa
static System.Drawing.Bitmap info_16
Busca un recurso adaptado de tipo System.Drawing.Bitmap.
Casilla numérica para mostrar el importe de los artículos
override void _Load()
Load del proveedor
bool _Control_FormaPago
Si se permite la declaración de forma de pago para poner en el documento destino
Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc.
KeyDiccionarioMascara
Clave para diccionario de máscaras
Clase de negocio Proveedor
Clase del objeto grid para Sage50
virtual String _ReportFile
Nombre del fichero para el report
static bool EstaEnUsoElDocumento(dynamic documento)
Método que a partir de un documento tipado determina si esta en uso
eTipoDocumentoGeneral
Enumeración pública para definir las diferentes categorias que tenemos de documentos (ventas...
Clase de traducción de strings según idioma
bool _Control_Operario
Si se permite la declaración de operario para poner en el documento destino
_DestinosTraspaso
Posibles documentos destino de traspaso tanto para ventas como para compras.
Clase para configurar los parametros para realizar traspaso del documento origen (ventas/compras: ped...
DataTable _Execute()
Ejecución del listado. Internamente llamara a _DataTable() que nos devolvera los datos, _SetColumnCaptions que nos establecera los nombres a mostrar de las columnas del listado y a _SetColumnMasks que establecera la mascara de las columnas que lo requieran
Proporciona características adicionales de las máscaras de Eurowin
eTipoDocumento
Detalle los tipos de documento posibles de ventas y compras
Articulo _oArticulo
Objeto articulo
Dictionary< string, object > _Opciones
Diccionario con las posibles opciones que se pueda presentar el resultado de un listado Esta propieda...
new bool ReadOnly
Controla si se puede cambiar el texto en el control de edición. PE-76532 Si es de solo lectura se blo...
string _Mascara_Net
Máscara convertida en formato .Net
Clase de negocio para la DIVISA (Moneda)
static sage.ew.functions.Translate _This
Instancia estática del objeto Translate
bool _Control_Almacen
Si se permite la declaración de almacén para poner en el documento destino
Clase EnUso. PE-103176 Centralización de código para la gestión del KeyCopy de las clases que lo requ...