private void ValidarBooking(ReservaContenedorCommand command)
        {
            ReservaBooking dominio = _reservaBooking.Get(x => x.rb_str_numero_booking.Equals(command.rb_str_numero_booking, StringComparison.InvariantCulture)).LastOrDefault();

            if (!command.rb_int_id.HasValue && dominio != null)
            {
                throw new ReservaBookingException("El número de booking ya ha sido ingresado");
            }

            if (command.Documentos == null || command.Documentos.Any() == false)
            {
                throw new ReservaBookingException("Tiene que adjuntar por lo menos un documento.");
            }

            var documento_booking = command.Documentos.LastOrDefault(x => x.mlt_str_valor_tipo_documento == "DOC1");

            if (documento_booking == null)
            {
                throw new ReservaBookingException("Se tiene que adjuntar la hoja de booking.");
            }

            var documento_precinto = command.Documentos.LastOrDefault(x => x.mlt_str_valor_tipo_documento == "DOC3");

            if (documento_precinto == null)
            {
                throw new ReservaBookingException("Se tiene que adjuntar la carta precinto.");
            }
        }
        private static ReservaBooking MapBooking(ReservaBooking domain, ReservaContenedorCommand command)
        {
            domain.rb_str_numero_booking      = command.rb_str_numero_booking;
            domain.rb_str_oficina             = command.rb_str_oficina;
            domain.rb_str_oficina_descripcion = command.rb_str_oficina_descripcion;
            domain.rb_str_depot                    = command.rb_str_depot;
            domain.rb_str_depot_descripcion        = command.rb_str_depot_descripcion;
            domain.rb_str_tipo_reserva             = command.rb_str_tipo_reserva;
            domain.rb_str_tipo_reserva_descripcion = command.rb_str_tipo_reserva_descripcion;
            domain.rb_str_fecha_reserva            = command.rb_str_fecha_reserva;
//            domain.rb_str_codigo_cliente = command.rb_str_codigo_cliente;
            domain.rb_str_codigo_cliente           = command.rb_str_codigo_cliente_factura;
            domain.rb_str_codigo_buque             = command.rb_str_codigo_buque;
            domain.rb_str_codigo_buque_descripcion = command.rb_str_codigo_buque_descripcion;
            domain.rb_str_viaje = command.rb_str_viaje;
            domain.rb_str_codigo_puerto_origen                    = command.rb_str_codigo_puerto_origen;
            domain.rb_str_codigo_puerto_origen_descripcion        = command.rb_str_codigo_puerto_origen_descripcion;
            domain.rb_str_codigo_puerto_destino                   = command.rb_str_codigo_puerto_destino;
            domain.rb_str_codigo_puerto_destino_descripcion       = command.rb_str_codigo_puerto_destino_descripcion;
            domain.rb_str_codigo_puerto_destino_final             = command.rb_str_codigo_puerto_destino_final;
            domain.rb_str_codigo_puerto_destino_final_descripcion = command.rb_str_codigo_puerto_destino_final_descripcion;
            domain.rb_str_codigo_agente_carga             = command.rb_str_codigo_agente_carga;
            domain.rb_str_codigo_agente_carga_descripcion = command.rb_str_codigo_agente_carga_descripcion;
            domain.rb_str_fecha_eta          = command.rb_str_fecha_eta;
            domain.rb_str_hora_eta           = command.rb_str_hora_eta;
            domain.rb_str_producto           = command.rb_str_producto;
            domain.rb_str_subproducto        = command.rb_str_subproducto;
            domain.rb_int_espacios           = command.rb_int_espacios;
            domain.rb_str_ws_estado          = command.rb_str_ws_estado;
            domain.rb_str_consolidador       = command.rb_str_consolidador;
            domain.rb_str_operador_logistico = command.rb_str_operador_logistico;
            domain.rb_str_agente_aduana      = command.rb_str_agente_aduana;
            domain.rb_str_mercancia          = command.rb_str_mercancia;
            domain.rb_dec_peso                     = command.rb_dec_peso;
            domain.rb_bit_checkimo                 = command.rb_bit_checkimo;
            domain.rb_str_codigoimo                = command.rb_str_codigoimo;
            domain.rb_bit_servicio_integral        = command.rb_bit_servicio_integral;
            domain.rb_str_numero_servicio_integral = command.rb_str_numero_servicio_integral;
            domain.rb_str_condicion_origen         = command.rb_str_condicion_origen;
            domain.rb_str_local_asignado           = command.rb_str_local_asignado;
            domain.rb_str_embarque_via             = command.rb_str_embarque_via;
            domain.rb_str_movilizado               = command.rb_str_movilizado;
            domain.rb_str_nombre_contacto          = command.rb_str_nombre_contacto;
            domain.rb_str_telefono_contacto        = command.rb_str_telefono_contacto;
            domain.rb_str_email_contacto           = command.rb_str_email_contacto;
            domain.mlt_int_id_estado_reserva       = command.mlt_int_id_estado_reserva;
            domain.mlt_str_estado_reserva          = command.mlt_str_estado_reserva;
            domain.rb_dat_fecha_creacion           = DateTime.Now;
            domain.rb_str_usuario_creacion         = command.rb_str_usuario_creacion;

            if (command.Documentos != null || command.Documentos.Any())
            {
                if (domain.lista_documentos_adjuntos == null)
                {
                    domain.lista_documentos_adjuntos = new List <ReservaBookingAdjuntos>();
                }
                foreach (var documento in command.Documentos)
                {
                    var existe_documento = true;
                    ReservaBookingAdjuntos dominio_documento = domain.lista_documentos_adjuntos.LastOrDefault(x => x.mlt_str_valor_tipo_documento == documento.mlt_str_valor_tipo_documento); // == null : new ReservaBookingAdjuntos();
                    if (dominio_documento == null)
                    {
                        dominio_documento = new ReservaBookingAdjuntos();
                        existe_documento  = false;
                    }

                    dominio_documento.rba_str_nombre_archivo = documento.rba_str_nombre_archivo;
                    if (existe_documento == false)
                    {
                        dominio_documento.rba_dat_fecha_creacion       = DateTime.Now;
                        dominio_documento.rba_str_usuario_creacion     = command.rb_str_usuario_creacion;
                        dominio_documento.mlt_int_id_tipo_documento    = documento.mlt_int_id_tipo_documento;
                        dominio_documento.mlt_str_valor_tipo_documento = documento.mlt_str_valor_tipo_documento;

                        domain.lista_documentos_adjuntos.Add(dominio_documento);
                    }
                }
            }
            return(domain);
        }