public async Task <IActionResult> Create([Bind("UserID,WaterMeterLastReadDate,WaterMeterID,WaterMeterImg,ImgPath")] WaterTransaction waterTransaction)
        {
            if (ModelState.IsValid)
            {
                waterTransaction.UserID = (int)HttpContext.Session.GetInt32("UserID");

                string ImgPathAfterSave = Image.Save(waterTransaction.UserID, waterTransaction.WaterMeterImg, waterTransaction.WaterMeterID, "Water");
                if (ImgPathAfterSave == null) // Another file with same name is already exist - "UserID-WaterMeterID" has to be unique
                {
                    ModelState.AddModelError("", "Another transaction with the same User ID Water Meter ID is already exist.");
                    return(View());
                }

                waterTransaction.Status = Config.TransactionStatus.Open; // Init new transaction status

                waterTransaction.ImgPath = ImgPathAfterSave;
                _context.Add(waterTransaction);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }

            ViewData["UserID"] = new SelectList(_context.User, "UserID", "UserID", waterTransaction.UserID);
            return(View(waterTransaction));
        }
        public async Task <IActionResult> Edit(int id, [Bind("UserID,WaterMeterLastReadDate,WaterMeterID,ImgPath")] WaterTransaction waterTransaction)
        {
            if (id != waterTransaction.WaterMeterID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(waterTransaction);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!WaterTransactionExists(waterTransaction.WaterMeterID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["UserID"] = new SelectList(_context.User, "UserID", "UserID", waterTransaction.UserID);
            return(View(waterTransaction));
        }
        public async Task <IActionResult> Create([Bind("UserID,WaterMeterLastReadDate,WaterMeterID,ImgPath")] WaterTransaction waterTransaction)
        {
            if (ModelState.IsValid)
            {
                _context.Add(waterTransaction);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["UserID"] = new SelectList(_context.User, "UserID", "UserID", waterTransaction.UserID);
            return(View(waterTransaction));
        }
        public IActionResult CreateNewTransaction(WaterTransaction userInput)
        {
            string newFileName = userInput.UserID.ToString() + Path.GetExtension(userInput.WaterMeterImg.FileName);

            string PhysicalAddressOfSaveNewFile = Path.Combine(Config.PhysicalWaterFilesPath, newFileName);

            userInput.WaterMeterImg.CopyTo(new FileStream(PhysicalAddressOfSaveNewFile, FileMode.Create));

            string           RelativeAddressOfNewFile = Path.Combine(Config.RelativeWaterFilesPath, newFileName);
            WaterTransaction insertToDb = new WaterTransaction {
                UserID = userInput.UserID, ImgPath = RelativeAddressOfNewFile, WaterMeterID = userInput.WaterMeterID, WaterMeterLastReadDate = userInput.WaterMeterLastReadDate
            };

            _context.WaterTransactions.Add(insertToDb);

            _context.SaveChanges();

            return(RedirectToAction("Index"));
        }
        public async Task <IActionResult> Edit(int id, [Bind("UserID,WaterMeterLastReadDate,WaterMeterID,WaterMeterImg,ImgPath,Status")] WaterTransaction waterTransactionAfterEdit)
        {
            var waterTransactionBeforeEdit = await _context.WaterTransactions.FindAsync(id);

            if (waterTransactionBeforeEdit == null)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    if (waterTransactionAfterEdit.WaterMeterImg != null)
                    {
                        string newImgRelativePath = Image.Edit(waterTransactionBeforeEdit.UserID, waterTransactionBeforeEdit.ImgPath, waterTransactionAfterEdit.WaterMeterImg, waterTransactionBeforeEdit.WaterMeterID, "Water");
                        waterTransactionBeforeEdit.ImgPath = newImgRelativePath;
                    }

                    waterTransactionBeforeEdit.Status = waterTransactionAfterEdit.Status;
                    waterTransactionBeforeEdit.WaterMeterLastReadDate = waterTransactionAfterEdit.WaterMeterLastReadDate;
                    _context.Update(waterTransactionBeforeEdit);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!WaterTransactionExists(waterTransactionAfterEdit.WaterMeterID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["UserID"] = new SelectList(_context.User, "UserID", "UserID", waterTransactionAfterEdit.UserID);
            return(View(waterTransactionAfterEdit));
        }