public ActionResult Edit(Guid id)
        {
            CreateInRequestInput viewModel = new CreateInRequestInput();

            try
            {
                viewModel = _inRequestService.GetEdit(id);
                DateTime date;

                viewModel.TypeInRequestValue = (int)viewModel.TypeInRequest;
                if (viewModel.AssetsReturnDate != null)
                {
                    date = new DateTime(viewModel.AssetsReturnDate.Value.Year, viewModel.AssetsReturnDate.Value.Month, viewModel.AssetsReturnDate.Value.Day);
                    viewModel.AssetsReturnDateString = date.ToString("yyyy-MM-dd");
                }
                viewModel.StateRequest     = (int)viewModel.Status;
                viewModel.DetailsRequest   = _inRequestService.GetEditDetails(id, viewModel.CellarId);
                viewModel.IsEdit           = true;
                viewModel.Cellars          = _inRequestService.GetAllCellars(_currentUser.CompanyName);
                viewModel.ErrorCode        = 0;
                viewModel.ErrorDescription = "";
            }
            catch (Exception e)
            {
                viewModel.ErrorCode        = -1;
                viewModel.ErrorDescription = "Error al obtener datos.";
            }
            return(View("_edit", viewModel));
        }
        //// GET: InRequests/Create
        public ActionResult Create(int?param)
        {
            CreateInRequestInput viewModel = new CreateInRequestInput();

            viewModel.IsEdit = false;
            try
            {
                //viewModel.NoRequest = _solicitudMovimientoService.GetNextNoSolicitudMovimiento();
                viewModel.CompanyName    = _currentUser.CompanyName;
                viewModel.RequestNumber  = _inRequestService.GetNextRequestNumber(_currentUser.CompanyName);
                viewModel.Status         = InRequestStatus.Active;
                viewModel.StateRequest   = (int)InRequestStatus.Active;
                viewModel.DetailsRequest = new List <DetailAssetInRequestDto>();
                viewModel.Cellars        = _inRequestService.GetAllCellars(_currentUser.CompanyName);
                viewModel.CellarId       = viewModel.Cellars.FirstOrDefault().Id;
                var firstOrDefault = _cellarService.GetAllCellar(_currentUser.CompanyName).FirstOrDefault();
                if (firstOrDefault != null)
                {
                    viewModel.CellarId = firstOrDefault.Id;
                }
                viewModel.ProjectId        = null;
                viewModel.ErrorCode        = 0;
                viewModel.ErrorDescription = "";
            }
            catch (Exception e)
            {
                viewModel.ErrorCode        = -1;
                viewModel.ErrorDescription = "Error al obtener datos.";
            }
            return(View("_create", viewModel));
        }
        public void Create(CreateInRequestInput input)
        {
            //if (_inRequestManager.InRequestExist(input.RequestDocumentNumber, input.Id, input.CompanyName))
            //{
            //    throw new UserFriendlyException("Existe una solicitud con el mismo numero de Solicitud Fisica.");
            //}
            TypeInRequest   temp = (TypeInRequest)input.TypeInRequestValue;
            InRequestStatus temp1;

            temp1 = InRequestStatus.Active;

            var requestNumber = GetNextRequestNumber(input.CompanyName);

            var @entityInRequest = InRequest.Create(requestNumber, requestNumber.ToString(), input.PurchaseOrderNumber, input.Notes, null,
                                                    input.CellarId, temp1, temp, input.CreatorGuidId.Value, _dateTime.Now, input.PersonInCharge, input.CompanyName, input.Comment);

            IList <Detail> @details = new List <Detail>();

            foreach (var item in input.DetailsRequest)
            {
                var @entityDetail = Detail.Create(@entityInRequest.Id, null, null, item.AssetId, item.NameAsset, item.StockAsset, Double.Parse(item.Price),
                                                  input.CreatorGuidId.Value, _dateTime.Now, input.CompanyName);
                @details.Add(@entityDetail);
            }

            if (HasFile(input.Image1))
            {
                string folderPath = "~/InRequestImages/";
                string fileName   = input.Image1.FileName;//input.Id + ".png"

                var mappedPath = HostingEnvironment.MapPath(folderPath) + fileName;
                var directory  = new DirectoryInfo(HostingEnvironment.MapPath(folderPath));
                if (directory.Exists == false)
                {
                    directory.Create();
                }
                string folderPathRelative = "../../InRequestImages/";
                input.ImagePath1 = folderPathRelative + fileName;
                input.Image1.SaveAs(mappedPath);

                @entityInRequest.SetImage1(input.ImagePath1);
            }

            if (HasFile(input.Image2))
            {
                string folderPath = "~/InRequestImages/";
                string fileName   = input.Image2.FileName;//input.Id + ".png"

                var mappedPath = HostingEnvironment.MapPath(folderPath) + fileName;
                var directory  = new DirectoryInfo(HostingEnvironment.MapPath(folderPath));
                if (directory.Exists == false)
                {
                    directory.Create();
                }
                string folderPathRelative = "../../InRequestImages/";
                input.ImagePath2 = folderPathRelative + fileName;
                input.Image2.SaveAs(mappedPath);

                @entityInRequest.SetImage2(input.ImagePath2);
            }
            if (!string.IsNullOrEmpty(input.SignatureData))
            {
                @entityInRequest.SetSignatureData(input.SignatureData);
            }

            _inRequestManager.Create(@entityInRequest, @details);
        }
        public void Update(CreateInRequestInput input)
        {
            var @entity       = _inRequestRepository.Get(input.Id);
            var @entityDetail = _inRequestManager.GetEditDetails(input.Id).ToList();

            if (@entity == null)
            {
                throw new UserFriendlyException("No se pudo encontrar la Ubicación, fue borrada o no existe.");
            }
            //if (_inRequestManager.InRequestExist(@entity.RequestDocumentNumber, input.Id,input.CompanyName))
            //{
            //    throw new UserFriendlyException("Existe una Ubicación con el mismo Nombre.");
            //}
            IList <Detail> newDetails    = new List <Detail>();
            IList <Detail> updateDetails = new List <Detail>();

            //@entity.RequestDocumentNumber = input.RequestDocumentNumber;
            //@entity.AssetsReturnDate = input.AssetsReturnDate;
            @entity.TypeInRequest        = (TypeInRequest)input.TypeInRequestValue;
            @entity.Status               = (InRequestStatus)input.StateRequest;
            @entity.ProjectId            = input.ProjectId;
            @entity.LastModificationTime = _dateTime.Now;
            @entity.LastModifierUserId   = input.CreatorUserId;
            @entity.Notes          = input.Notes;
            @entity.PersonInCharge = input.PersonInCharge;

            foreach (var item in input.DetailsRequest)
            {
                if (@entityDetail.Exists(a => a.AssetId == item.AssetId))
                {
                    var @updateEntity = @entityDetail.Where(a => a.AssetId == item.AssetId).FirstOrDefault();
                    if (item.Delete == 1)
                    {
                        if (item.Saved == 1)
                        {
                            @updateEntity.IsDeleted = true;
                            updateDetails.Add(@updateEntity);
                        }
                    }
                    else if (item.Update == 1)
                    {
                        @updateEntity.Price                = Double.Parse(item.Price);
                        @updateEntity.NameAsset            = item.NameAsset;
                        @updateEntity.StockAsset           = item.StockAsset;
                        @updateEntity.LastModificationTime = _dateTime.Now;
                        @updateEntity.LastModifierUserId   = input.CreatorUserId;
                        updateDetails.Add(@updateEntity);
                    }
                }
                else
                {
                    var @createDetail = Detail.Create(input.Id, null, null, item.AssetId, item.NameAsset, item.StockAsset, Double.Parse(item.Price),
                                                      input.CreatorUserId, _dateTime.Now, input.CompanyName);
                    newDetails.Add(@createDetail);
                }
            }

            if (HasFile(input.Image1))
            {
                string folderPath = "~/InRequestImages/";
                string fileName   = input.Image1.FileName;//input.Id + ".png"

                var mappedPath = HostingEnvironment.MapPath(folderPath) + fileName;
                var directory  = new DirectoryInfo(HostingEnvironment.MapPath(folderPath));
                if (directory.Exists == false)
                {
                    directory.Create();
                }
                string folderPathRelative = "../../InRequestImages/";
                input.ImagePath1 = folderPathRelative + fileName;
                input.Image1.SaveAs(mappedPath);

                @entity.SetImage1(input.ImagePath1);
            }

            if (HasFile(input.Image2))
            {
                string folderPath = "~/InRequestImages/";
                string fileName   = input.Image2.FileName;//input.Id + ".png"

                var mappedPath = HostingEnvironment.MapPath(folderPath) + fileName;
                var directory  = new DirectoryInfo(HostingEnvironment.MapPath(folderPath));
                if (directory.Exists == false)
                {
                    directory.Create();
                }
                string folderPathRelative = "../../InRequestImages/";
                input.ImagePath2 = folderPathRelative + fileName;
                input.Image2.SaveAs(mappedPath);

                @entity.SetImage2(input.ImagePath2);
            }
            if (!string.IsNullOrEmpty(input.SignatureData))
            {
                @entity.SetSignatureData(input.SignatureData);
            }

            _inRequestManager.Update(@entity, newDetails, updateDetails);
        }
        public ActionResult Edit()//IList<string> entity
        {
            CreateInRequestInput viewModel = new CreateInRequestInput();

            viewModel.IsEdit = true;
            try
            {
                if (viewModel.Status == InRequestStatus.Processed || viewModel.Status == InRequestStatus.Closed)
                {
                    return(Json(new { ErrorCode = -1, ErrorDescription = "Refresque la pagina y verifique los datos, no puede modificar una solicitud ya procesada" }));
                }
                else
                {
                    viewModel = JsonConvert.DeserializeObject <CreateInRequestInput>(System.Web.HttpContext.Current.Request["InRequestDataSection"]);
                    var imageToUpload1 = System.Web.HttpContext.Current.Request.Files["InRequestImagesSection1"];
                    var imageToUpload2 = System.Web.HttpContext.Current.Request.Files["InRequestImagesSection2"];

                    //if (viewModel.RequestDocumentNumber == String.Empty || viewModel.RequestDocumentNumber == null)
                    //{ return Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe tener un numero de solicitud fisica." }); }

                    if (viewModel.DetailsRequest == null || !viewModel.DetailsRequest.Any())
                    {
                        return(Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe tener algún detalle de artículos." }));
                    }

                    //if (viewModel.PurchaseOrderNumber == String.Empty || viewModel.PurchaseOrderNumber == null)
                    //{ return Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe tener algún número de orden de compra." }); }

                    if (viewModel.PersonInCharge == String.Empty || viewModel.PersonInCharge == null)
                    {
                        return(Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe tener algún responsable." }));
                    }

                    if (viewModel.CellarId == Guid.Empty)
                    {
                        return(Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe llevar una Ubicación." }));
                    }

                    if (ModelState.IsValid)
                    {
                        if (imageToUpload1 != null)
                        {
                            viewModel.Image1 = imageToUpload1;
                            if (!CheckImageFormat.IsImage(imageToUpload1))
                            {
                                //viewModel.ErrorCode = ErrorCodeHelper.Error;
                                //viewModel.ErrorDescription = "Error al cargar la imagen 1 seleccionada, la extensión debe ser de tipo *.jpg, *.png, *.gif, *.jpeg";
                                return(Json(new { ErrorCode = ErrorCodeHelper.Error, ErrorDescription = "Error al cargar la imagen 1 seleccionada, la extensión debe ser de tipo *.jpg, *.png, *.gif, *.jpeg,*.PDF" }));
                            }
                        }

                        if (imageToUpload2 != null)
                        {
                            viewModel.Image2 = imageToUpload2;
                            if (!CheckImageFormat.IsImage(imageToUpload2))
                            {
                                //viewModel.ErrorCode = ErrorCodeHelper.Error;
                                //viewModel.ErrorDescription = "Error al cargar la imagen 1 seleccionada, la extensión debe ser de tipo *.jpg, *.png, *.gif, *.jpeg";
                                return(Json(new { ErrorCode = ErrorCodeHelper.Error, ErrorDescription = "Error al cargar la imagen 2 seleccionada, la extensión debe ser de tipo *.jpg, *.png, *.gif, *.jpeg,*.PDF" }));
                            }
                        }

                        if (viewModel.Image1 == null && viewModel.Image2 == null)
                        {
                            return(Json(new { ErrorCode = ErrorCodeHelper.Error, ErrorDescription = "La solicitud para ser entregada debe tener almenos una imagen adjunta." }));
                        }

                        viewModel.CompanyName = _currentUser.CompanyName;
                        _inRequestService.Update(viewModel);
                        return(Json(new { ErrorCode = 1, ErrorDescription = "Solicitud guardada exitosamente." }));
                    }

                    return(Json(new { ErrorCode = -1, ErrorDescription = "Error al editar la solicitud, verifique los datos." }));
                }
            }

            catch (Exception e)
            {
                return(Json(new { ErrorCode = -1, ErrorDescription = e.Message }));
            }
        }
        public ActionResult Create()//IList<string> entity
        {
            CreateInRequestInput viewModel = new CreateInRequestInput();

            try
            {
                viewModel = JsonConvert.DeserializeObject <CreateInRequestInput>(System.Web.HttpContext.Current.Request["InRequestDataSection"]);
                var imageToUpload1 = System.Web.HttpContext.Current.Request.Files["InRequestImagesSection1"];
                var imageToUpload2 = System.Web.HttpContext.Current.Request.Files["InRequestImagesSection2"];
                var signature      = System.Web.HttpContext.Current.Request.Form["SignatureStr"];

                viewModel.SignatureData = signature;
                // _currentUser.
                //if (viewModel.RequestDocumentNumber == String.Empty || viewModel.RequestDocumentNumber == null)
                //{ return Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe tener un numero de solicitud fisica." }); }

                if (viewModel.DetailsRequest == null || !viewModel.DetailsRequest.Any())
                {
                    return(Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe tener algún detalle de artículos." }));
                }

                //if (viewModel.PurchaseOrderNumber == String.Empty || viewModel.PurchaseOrderNumber == null)
                //{ return Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe tener algún número de orden de compra." }); }

                if (viewModel.PersonInCharge == String.Empty || viewModel.PersonInCharge == null)
                {
                    return(Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe tener algún responsable." }));
                }

                if (viewModel.CellarId == Guid.Empty)
                {
                    return(Json(new { ErrorCode = -1, ErrorDescription = "La solicitud debe llevar una Ubicación." }));
                }

                if (ModelState.IsValid)
                {
                    if (imageToUpload1 != null)
                    {
                        viewModel.Image1 = imageToUpload1;
                        if (!CheckImageFormat.IsImage(imageToUpload1))
                        {
                            //viewModel.ErrorCode = ErrorCodeHelper.Error;
                            //viewModel.ErrorDescription = "Error al cargar la imagen 1 seleccionada, la extensión debe ser de tipo *.jpg, *.png, *.gif, *.jpeg";
                            return(Json(new { ErrorCode = ErrorCodeHelper.Error, ErrorDescription = "Error al cargar la imagen 1 seleccionada, la extensión debe ser de tipo *.jpg, *.png, *.gif, *.jpeg,*.PDF" }));
                        }
                    }

                    if (imageToUpload2 != null)
                    {
                        viewModel.Image2 = imageToUpload2;
                        if (!CheckImageFormat.IsImage(imageToUpload2))
                        {
                            //viewModel.ErrorCode = ErrorCodeHelper.Error;
                            //viewModel.ErrorDescription = "Error al cargar la imagen 1 seleccionada, la extensión debe ser de tipo *.jpg, *.png, *.gif, *.jpeg";
                            return(Json(new { ErrorCode = ErrorCodeHelper.Error, ErrorDescription = "Error al cargar la imagen 2 seleccionada, la extensión debe ser de tipo *.jpg, *.png, *.gif, *.jpeg,*.PDF" }));
                        }
                    }

                    viewModel.CreatorGuidId = _currentUser.CurrentUserId;
                    viewModel.CompanyName   = _currentUser.CompanyName;
                    try
                    {
                        _inRequestService.Create(viewModel);
                    }
                    catch (Exception ex)
                    {
                        return(Json(new { ErrorCode = -1, ErrorDescription = "Error al guardar la solicitud, verifique los datos." }));
                    }

                    ModelState.Clear();
                    return(Json(new { ErrorCode = 1, ErrorDescription = "Orden de Compra guardada exitosamente." }));
                }
                return(Json(new { ErrorCode = -1, ErrorDescription = "Error al guardar la solicitud, verifique los datos." }));
            }
            catch (Exception e)
            {
                return(Json(new { ErrorCode = -1, ErrorDescription = e.Message }));
            }
        }