public OrderFormViewModel()
        {
            OrderDataSet dataset = new OrderDataSet();

            OrderDataSetTableAdapters.OrdersTableAdapter     Order     = new OrderDataSetTableAdapters.OrdersTableAdapter();
            OrderDataSetTableAdapters.Orders_ObsTableAdapter Order_obs = new OrderDataSetTableAdapters.Orders_ObsTableAdapter();

            _row     = dataset.Orders.NewOrdersRow();
            _row_obs = dataset.Orders_Obs.NewOrders_ObsRow();

            //Order
            _row.Reference       = "";
            _row.OperatorId      = 0;
            _row.ClientId        = 0;
            _row.StartDate       = DateTime.Now;
            _row.FinalDate       = DateTime.MinValue;
            _row.Address         = "";
            _row.City            = "";
            _row.PostCode        = "";
            _row.FactoryId       = 0;
            _row.ProductId       = 0;
            _row.VehicleSize     = 1;
            _row.RequestedAmount = 0;
            _row.Status          = 1;

            _row.CreatedDate  = DateTime.Now;
            _row.ModifiedDate = DateTime.Now;

            //observaciones pedido
            _row_obs.Observations = "";
            _row_obs.Description  = "";

            SaveCommand = new RelayCommand(Save, CanSave);
        }
        public void Load(long IdOrder)
        {
            try
            {
                OrderDataSet dataset = new OrderDataSet();
                OrderDataSetTableAdapters.OrdersTableAdapter TableOrder = new OrderDataSetTableAdapters.OrdersTableAdapter();
                OrderDataSet.OrdersDataTable dataTable = TableOrder.GetDataOrderById(IdOrder);

                if (dataTable.Rows.Count > 0)
                {
                    OrderDataSetTableAdapters.Orders_ObsTableAdapter order_obs = new OrderDataSetTableAdapters.Orders_ObsTableAdapter();
                    OrderDataSet.Orders_ObsDataTable dataTable_Obs             = order_obs.GetDataOrder_ObsById(IdOrder);

                    _row = (OrderDataSet.OrdersRow)dataTable.Rows[0];

                    RaisePropertyChanged(nameof(Reference));
                    RaisePropertyChanged(nameof(OperatorCode));
                    RaisePropertyChanged(nameof(ClientCode));
                    RaisePropertyChanged(nameof(ProductCode));
                    RaisePropertyChanged(nameof(FactoryCode));
                    RaisePropertyChanged(nameof(ClientId));
                    RaisePropertyChanged(nameof(Address));
                    RaisePropertyChanged(nameof(City));
                    RaisePropertyChanged(nameof(PostCode));
                    RaisePropertyChanged(nameof(FromDate));
                    RaisePropertyChanged(nameof(ToDate));
                    RaisePropertyChanged(nameof(ProductId));
                    RaisePropertyChanged(nameof(VehicleSize));
                    RaisePropertyChanged(nameof(RequestedAmount));
                    RaisePropertyChanged(nameof(Status));

                    //Cargamos datos
                    LoadDatasInterface(_row.ProductId, _row.OperatorId, _row.ClientId, _row.FactoryId);

                    _row_obs = (OrderDataSet.Orders_ObsRow)dataTable_Obs.Rows[0];
                    RaisePropertyChanged(nameof(Description));
                    RaisePropertyChanged(nameof(Observation));
                }
                FormLoadFinished?.Invoke();
            }
            catch (Exception e)
            {
                FormLoadError?.Invoke(e);
            }
        }
        public void Save()
        {
            int  indentificadorPedido = 0;
            bool validate             = true;

            try
            {
                validate = validateDatas(_row.Reference, _row.OperatorId, _row.ProductId, _row.ClientId, _row.FactoryId, _row.StartDate, _row.FinalDate);

                if (validate)
                {
                    OrderDataSet dataset = new OrderDataSet();
                    OrderDataSetTableAdapters.Orders_ObsTableAdapter tableAdapterOrderObs = new OrderDataSetTableAdapters.Orders_ObsTableAdapter();

                    OrderDataSetTableAdapters.OrdersTableAdapter TableOrder = new OrderDataSetTableAdapters.OrdersTableAdapter();
                    OrderDataSet.OrdersDataTable dataTable = TableOrder.GetDataOrderById(_row.Id);

                    //actualizamnos si existe el registro
                    if (dataTable.Rows.Count > 0)
                    {
                        var rowOrder = dataset.Orders.NewOrdersRow();

                        rowOrder = dataTable[0];
                        rowOrder["Reference"]       = _row.Reference;
                        rowOrder["OperatorId"]      = _row.OperatorId;
                        rowOrder["ClientId"]        = _row.ClientId;
                        rowOrder["Address"]         = _row.Address;
                        rowOrder["City"]            = _row.City;
                        rowOrder["PostCode"]        = _row.PostCode;
                        rowOrder["StartDate"]       = _row.StartDate;
                        rowOrder["FinalDate"]       = _row.FinalDate;
                        rowOrder["FactoryId"]       = _row.FactoryId;
                        rowOrder["ProductId"]       = _row.ProductId;
                        rowOrder["VehicleSize"]     = _row.VehicleSize;
                        rowOrder["RequestedAmount"] = _row.RequestedAmount;
                        rowOrder["Status"]          = _row.Status;
                        rowOrder["CreatedDate"]     = DateTime.Now;
                        rowOrder["ModifiedDate"]    = DateTime.Now;

                        int numeroderegistros = TableOrder.Update(rowOrder);

                        //si se actualizado la pedido actualizamos las observaciones
                        if (numeroderegistros > 0)
                        {
                            //actualizamos la observacion
                            tableAdapterOrderObs.UpdateOrderObs(_row_obs.Description, _row_obs.Observations, _row.Id);
                        }
                    }
                    //insertamos el nuevo Orders  y las observaciones (orders_obs)
                    else
                    {
                        TableOrder = new OrderDataSetTableAdapters.OrdersTableAdapter();
                        //obtenemos de la tabla Orders  el nuevo registro que se introducira
                        var rowOrder = dataset.Orders.NewOrdersRow();

                        rowOrder.Reference       = _row.Reference;
                        rowOrder.OperatorId      = _row.OperatorId;
                        rowOrder.ClientId        = _row.ClientId;
                        rowOrder.Address         = _row.Address;
                        rowOrder.City            = _row.City;
                        rowOrder.PostCode        = _row.PostCode;
                        rowOrder.Latitude        = 0;
                        rowOrder.Longitude       = 0;
                        rowOrder.TankNum         = "1";
                        rowOrder.TankVolume      = 0;
                        rowOrder.Country         = "es";
                        rowOrder.StartDate       = _row.StartDate;
                        rowOrder.FinalDate       = _row.FinalDate;
                        rowOrder.FactoryId       = _row.FactoryId;
                        rowOrder.ProductId       = _row.ProductId;
                        rowOrder.VehicleSize     = _row.VehicleSize;
                        rowOrder.RequestedAmount = _row.RequestedAmount;
                        rowOrder.Status          = _row.Status;
                        rowOrder.CreatedDate     = DateTime.Now;
                        rowOrder.ModifiedDate    = DateTime.Now;

                        //agregamos la nueva fila
                        dataset.Orders.AddOrdersRow(rowOrder);
                        //actualizamos la tabla order en el dataset
                        TableOrder.Update(dataset.Orders);

                        //al insertar el registro nuevo en la tabla Order Id se actualiza
                        indentificadorPedido = Convert.ToInt32(rowOrder.Id);

                        // a continuación insertamos el resto de datos en la tabla Orders_obs cepsa con el indentificador de la orders recient introduzida
                        tableAdapterOrderObs = new OrderDataSetTableAdapters.Orders_ObsTableAdapter();
                        //obtenemos de la tabla Orders_obs el nuevo registro que se introducira
                        var rowOrder_obs = dataset.Orders_Obs.NewOrders_ObsRow();

                        //Id
                        rowOrder_obs.Id = indentificadorPedido;
                        //observations
                        rowOrder_obs.Observations = _row_obs.Observations;
                        //description
                        rowOrder_obs.Description = _row_obs.Description;
                        //agregamos la nueva fila a tabla orders_obs
                        dataset.Orders_Obs.AddOrders_ObsRow(rowOrder_obs);
                        //actualizamos la tabla orders_obs  en el dataset
                        tableAdapterOrderObs.Update(dataset.Orders_Obs);

                        //creamos el viaje que se asignara al pedido
                        OrderDataSet ImportDataSet = new OrderDataSet();
                        OrderDataSetTableAdapters.TripsTableAdapter tripstable = new OrderDataSetTableAdapters.TripsTableAdapter();
                        //obtenemos de la tabla trips  el nuevo registro que se introducira
                        var rowTrip = ImportDataSet.Trips.NewTripsRow();

                        //la ruta a la que pertenece el viaje que estamos creando y esta asignado la asignación
                        rowTrip.SetRouteIdNull();
                        //fecha de creación
                        rowTrip.CreatedDate = DateTime.Now;
                        //fecha de modificación
                        rowTrip.ModifiedDate = DateTime.Now;
                        //posición dentro la lista (empiezan por zero las listas en posiciones) (el primer elemento empieza por 1)
                        rowTrip.Position = 0;

                        //cantidad cargada del pedido
                        rowTrip.LoadedAmount = 0;
                        //fecha de carga
                        rowTrip.LoadedDate = DateTime.Now;
                        //estado del pedido a (pendiente)
                        rowTrip.status = 1;
                        //agregamos la nueva fila
                        ImportDataSet.Trips.AddTripsRow(rowTrip);
                        //asignamos el id del pedido
                        rowTrip.Id_Order = Convert.ToInt32(indentificadorPedido);
                        //actualizamos la tabla trips en el dataset  (con esto insertamos un nuevo viaje)
                        tripstable.Update(ImportDataSet.Trips);
                    }
                    FormSaveFinished?.Invoke();
                }
            }
            catch (Exception e)
            {
                FormSaveError?.Invoke(e);
            }
        }