Программное средство по обмену услугами для владельцев собак

Разработка приложения по обмену услугами для владельцев собак. Создание личного кабинета с персональными данными. Редактирование: личных данных, объявления, питомца. Алгоритм редактирования и удаления объявления. Тестирование данного программного средства

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 14.10.2016
Размер файла 2,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

using MyPet.WebUI.Models.ViewModels;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

namespace MyPet.WebUI.Controllers

{

[Authorize]

public class MessageController: Controller

{

// GET: Message

private IMyPetRepository repository;

private IRepository<Message> msgRepository;

//private int authorisedUserId = User.Identity.GetUserId<int>();

public MessageController(IMyPetRepository repo, IRepository<Message> mesrepo)

{

this.repository = repo;

this.msgRepository = mesrepo;

}

public ActionResult New(int id)

{

int authorisedUserId=User.Identity.GetUserId<int>();

var msgs=msgRepository.GetAll().Where(x => (x.AuthorId == id && x.ReceiverId == authorisedUserId) || (x.ReceiverId == id && x.AuthorId == authorisedUserId))

.OrderByDescending(x => x.DateAndTime).Take(10).OrderBy(x=>x.DateAndTime);

IEnumerable<Message> willBeViewedMsgs = msgs.Where(x => x.HasBeenViewed == false && User.Identity.GetUserId<int>() == x.ReceiverId);

foreach(var v in willBeViewedMsgs)

{

v.HasBeenViewed=true;

}

msgRepository.Save();

ViewBag.ReceiverId = id;

return View(msgs);

}

[HttpPost]

public ActionResult New(Message msg)

{

if (msg.Text != null && msg.AuthorId == User.Identity.GetUserId<int>())

{

msg.DateAndTime = DateTime.Now;

Message msgBeforeSavingInDB = msg;

msgRepository.Create(msg);

msgRepository.Save();

}

IEnumerable<Message> msgsToShow = msgRepository.Find(x => (x.AuthorId == msg.ReceiverId && x.ReceiverId == msg.AuthorId && x.HasBeenViewed == false)

|| (x.DateAndTime == msg.DateAndTime && x.AuthorId == msg.AuthorId && x.ReceiverId == msg.ReceiverId && x.Text == msg.Text));

foreach (var v in msgsToShow)

{

if (v.AuthorId != msg.AuthorId)

v.HasBeenViewed = true;

}

msgRepository.Save();

if (msgsToShow != null)

{

return PartialView("GetNextMsgs", msgsToShow);

}

else return null;

}

public ActionResult List()

{

int authorisedUserId = User.Identity.GetUserId<int>();

var receivedMsgsLists = msgRepository.Find(x => x.ReceiverId == authorisedUserId)

.GroupBy(x => x.AuthorId).ToArray();

List<MsgAndUnViewedMsgsCount> lastReceivedMsgsFromDifferentAuthors=new List<MsgAndUnViewedMsgsCount>();

foreach(var msgs in receivedMsgsLists)

{

int count=msgs.Where(x => x.ReceiverId == authorisedUserId && x.HasBeenViewed == false).Count();

Message lastCurMsg=msgs.OrderByDescending(x=>x.DateAndTime).FirstOrDefault();

lastReceivedMsgsFromDifferentAuthors.Add(new MsgAndUnViewedMsgsCount { Message = lastCurMsg, UnviewedMsgsCount = count, ReceiverProfile = repository.Profiles.Where(x => x.UserId == lastCurMsg.ReceiverId).FirstOrDefault()});

}

var sentMsgsLists = msgRepository.Find(x => x.AuthorId == authorisedUserId)

.GroupBy(x => x.ReceiverId).ToArray();

List<MsgAndUnViewedMsgsCount> lastSentMsgsFromDifferentAuthors=new List<MsgAndUnViewedMsgsCount>();

foreach(var msgs in sentMsgsLists)

{

int count = 0;

Message lastCurMsg = msgs.OrderByDescending(x => x.DateAndTime).FirstOrDefault();

lastSentMsgsFromDifferentAuthors.Add(new MsgAndUnViewedMsgsCount { Message = lastCurMsg, UnviewedMsgsCount = count, ReceiverProfile=repository.Profiles.Where(x=>x.UserId==lastCurMsg.ReceiverId).FirstOrDefault()});

}

List<MsgAndUnViewedMsgsCount> resultMsgs = new List<MsgAndUnViewedMsgsCount>();

foreach(var msg in lastReceivedMsgsFromDifferentAuthors)

{

MsgAndUnViewedMsgsCount ms = lastSentMsgsFromDifferentAuthors.Where(x =>

x.Message.AuthorId==msg.Message.ReceiverId

&& x.Message.ReceiverId==msg.Message.AuthorId).FirstOrDefault();

DateTime dt=(ms!=null?ms.Message.DateAndTime:msg.Message.DateAndTime);

if(dt > msg.Message.DateAndTime)

resultMsgs.Add(ms);

else resultMsgs.Add(msg);

}

return View(resultMsgs.OrderByDescending(x=>x.Message.DateAndTime));

}

public JsonResult GetUnviewedMsgsCountJson()

{

int authorisedUserId=User.Identity.GetUserId<int>();

var data = msgRepository.Find(x => (x.ReceiverId == authorisedUserId) && x.HasBeenViewed == false).Count();

return Json(data, JsonRequestBehavior.AllowGet);

}

public ActionResult GetNextMsgs(PresentedMsgsModelObj presMsgsObj)

{

IEnumerable<Message> newNextMsgs = msgRepository.Find(x => (x.ReceiverId == presMsgsObj.ReceiverId && x.AuthorId == presMsgsObj.AuthorId) || (x.ReceiverId == presMsgsObj.AuthorId && x.AuthorId == presMsgsObj.ReceiverId)).

OrderByDescending(x => x.DateAndTime).

Skip(presMsgsObj.PresentedMsgsCount).

Take(10).OrderBy(x=>x.DateAndTime);

IEnumerable<Message> willBeViewedMsgs = newNextMsgs.Where(x => x.HasBeenViewed == false && User.Identity.GetUserId<int>() == x.ReceiverId);

foreach(var v in willBeViewedMsgs)

{

v.HasBeenViewed=true;

}

msgRepository.Save();

if (newNextMsgs.Count() != 0)

return PartialView(newNextMsgs);

else return null;

}

// in this method property PresentedMsgsModelObj.PresentedMsgsCount is not nessecary, because the method returns new unViewede msgs

public ActionResult GetNewMsgs(PresentedMsgsModelObj presMsgsObj)

{

IEnumerable<Message> newMsgs = msgRepository.

Find(x => x.ReceiverId == presMsgsObj.AuthorId && x.AuthorId == presMsgsObj.ReceiverId && x.HasBeenViewed==false).

OrderByDescending(x => x.DateAndTime);

// in this foreach we are mark this msgs as they has been viewed

foreach (var v in newMsgs)

{

v.HasBeenViewed = true;

}

msgRepository.Save();

if (newMsgs.Count() != 0)

return PartialView("GetNextMsgs",newMsgs);

else return null;

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using MyPet.Domain.Entities;

using MyPet.Domain.Abstract;

using MyPet.WebUI.Models;

using MyPet.WebUI.Models.ViewModels;

using ImageResizer;

using System.IO;

using System.Text.RegularExpressions;

namespace MyRepetitor.WebUI.Controllers

{

public class PetsController: Controller

{

private IRepository<Pet> petsRepository;

private IMyPetRepository repository;

public PetsController(IRepository<Pet> petsRepo, IMyPetRepository repo)

{

this.petsRepository = petsRepo;

this.repository = repo;

}

public ActionResult MyPets(int id=0)

{

var pets = petsRepository.Find(x => x.UserId ==id);

if (pets != null)

return View(pets);

else return RedirectToAction("List");

}

public ActionResult List(int id=0)

{

if (id == 0)

return View(petsRepository.GetAll());

else

{

var pet=petsRepository.Find(x=>x.PetId==id);

if (pet != null)

return View(pet);

else

return RedirectToAction("Details", "Account", new { id = User.Identity.GetUserId<int>() });

}

}

public ActionResult Details(int id)

{

var pet = petsRepository.Get(id);

List<string[]> petPhotos = null;

string path = Server.MapPath(String.Concat("~/PetPhotos/", id).Trim());

if (pet != null)

{

DirectoryInfo dir = new DirectoryInfo(Server.MapPath(String.Concat("~/PetPhotos/", id).Trim()));

if (dir != null && dir.Exists && dir.GetFiles().Length>0)

{

IEnumerable<int> numbers = this.GetPhotoNumberCollection(path);

petPhotos = new List<string[]>();

IEnumerable<FileInfo> files = dir.GetFiles();

string[] curFiles;

foreach (var v in numbers)

{

curFiles = new string[3];

curFiles[0] = Path.GetFileNameWithoutExtension(files.FirstOrDefault(x => x.Name.Contains(String.Concat("big", v.ToString()).Trim())).Name);

curFiles[1] = Path.GetFileNameWithoutExtension(files.FirstOrDefault(x => x.Name.Contains(String.Concat("small", v.ToString()).Trim())).Name);

curFiles[2] = Path.GetFileNameWithoutExtension(files.FirstOrDefault(x => x.Name.Contains(String.Concat("tiny", v.ToString()).Trim())).Name);

petPhotos.Add(curFiles);

}

}

TempData["PetPhotos"] = petPhotos;

string petAvatarPath = String.Concat("small", this.GetMinNumberInFileNames(path).ToString()).Trim();

TempData["PetAvatarPath"] = petAvatarPath;

return View(pet);

}

else return

RedirectToAction("Details", "Account", new { id = User.Identity.GetUserId<int>() });

}

public ActionResult EditPet(int id)

{

var pet = petsRepository.Get(id);

if (pet != null)

{

ViewBag.DogBreeds = repository.DogBreeds;

return View(pet);

}

else return

RedirectToAction("Details", "Account", new { id = User.Identity.GetUserId<int>() });

}

[Authorize]

[HttpPost]

public ActionResult EditPet(Pet pet, HttpPostedFileBase[] uploads)

{

int id = User.Identity.GetUserId<int>();

if (ModelState.IsValid && pet.UserId == id)

{

foreach (var v in pet.Rewards.Where(x => x.PetOwnerId == 0))

{

v.PetOwnerId = pet.PetId;

}

if (uploads.Where(x => x != null).FirstOrDefault() != null && pet.HaveImages == false)

pet.HaveImages = true;

petsRepository.Update(pet);

petsRepository.Save();

pet = petsRepository.Get(pet.PetId);

try

{

if (uploads != null && uploads.Where(x => x != null).FirstOrDefault() != null)

{

string path = Server.MapPath(String.Concat("~/PetPhotos/", pet.PetId.ToString().Trim(), "/").Trim());

int i = this.GetMaxNumberInFileNames(path) + 1;

foreach (var upload in uploads)

{

if (upload != null)

{

if (upload.ContentLength > 0)

{

var versions = new Dictionary<string, string>();

//Define the versions to generate

versions.Add("big", "maxwidth=768&maxheight=1024&format=jpg");

versions.Add("small", "maxwidth=240&maxheight=320&format=jpg");

versions.Add("tiny", "&maxheight=108&format=jpg");//maxwidth=81

//Generate each version

foreach (var suffix in versions.Keys)

{

upload.InputStream.Seek(0, SeekOrigin.Begin);

//Let the image builder add the correct extension based on the output file type

ImageBuilder.Current.Build(

new ImageJob(upload.InputStream,

String.Concat(path, suffix, i.ToString()),

new Instructions(versions[suffix]),

false, true));

}

}

i++;

}

}

}

}

catch (NullReferenceException) { }

return RedirectToAction("Details", new { id = pet.PetId });

}

else

{

ViewBag.DogBreeds = repository.DogBreeds;

return View(pet);

}

}

public ActionResult EditPetAjax(int id)

{

var pet = petsRepository.Get(id);

if (pet != null)

{

ViewBag.DogBreeds = repository.DogBreeds;

return PartialView(pet);

}

else return

RedirectToAction("Details", "Account", new { id = User.Identity.GetUserId<int>() });

}

[HttpPost]

public ActionResult EditPetAjax(Pet pet)

{

int id = User.Identity.GetUserId<int>();

if (ModelState.IsValid && pet.UserId == id)

{

petsRepository.Update(pet);

petsRepository.Save();

pet = petsRepository.Get(pet.PetId);

return PartialView("DetailsPartial", pet);

}

return PartialView(pet);

}

public ActionResult Create()

{

ViewBag.DogBreeds = repository.DogBreeds;

return View(new Pet());

}

[HttpPost]

public ActionResult Create(Pet pet)

{

if (ModelState.IsValid)

{

pet.UserId = User.Identity.GetUserId<int>();

petsRepository.Create(pet);

petsRepository.Save();

return View("List", petsRepository.Find(x=>x.Name==pet.Name));

}

else return View(pet);

}

public ActionResult GetImg(string id)

{

FileInfo file = new FileInfo(Server.MapPath("~/Avatars/default-dog-avatar.jpg"));

if (id != null)

{

string[] strs = id.Split(new char[] { '-' });

if (strs.Length == 2 && (new FileInfo(Server.MapPath(String.Concat("~/PetPhotos/", strs[0].Trim(), "/", strs[1], ".jpg").Trim()))).Exists)

{

file = new FileInfo(Server.MapPath(String.Concat("~/PetPhotos/", strs[0].Trim(), "/", strs[1], ".jpg").Trim()));

}

else

{

file = new FileInfo(Server.MapPath("~/Avatars/default-dog-avatar.jpg"));

}

}

if (file.Exists)

return File(file.FullName, "text/plain", file.Name);

else return Content("");

}

[Authorize]

[HttpPost]

public ActionResult DeletePhoto(DeletePhotoModel delPhModel)

{

int authUserId = User.Identity.GetUserId<int>();

if (delPhModel.WhoCanDeleteId == authUserId && delPhModel.OwnerId != 0 && delPhModel.PhotoNumber != 0)

{

DirectoryInfo di = new DirectoryInfo(Server.MapPath(String.Concat("~/PetPhotos/", delPhModel.OwnerId.ToString().Trim()).Trim()));

if (di.Exists)

{

foreach (var file in di.GetFiles())

{

int fotoNumberLenght = delPhModel.PhotoNumber.ToString().Length;

int fileNameLength = Path.GetFileNameWithoutExtension(file.Name).Length;

if (file.Name.Contains(delPhModel.PhotoNumber.ToString()) &&

(Path.GetFileNameWithoutExtension(file.Name).LastIndexOf(delPhModel.PhotoNumber.ToString()) == fileNameLength - fotoNumberLenght))

{

file.Delete();

}

}

if (di.GetFiles().Length == 0)

{

di.Delete();

var pet = petsRepository.Find(x => x.PetId == delPhModel.OwnerId).FirstOrDefault();

if (pet != null)

pet.HaveImages = false;

petsRepository.Save();

}

}

}

return null;

}

[Authorize]

public ActionResult Delete(int id)

{

var pet = petsRepository.Get(id);

int userid = User.Identity.GetUserId<int>();

if (pet != null && pet.UserId == userid)

{

petsRepository.Delete(id);

petsRepository.Save();

var path = Server.MapPath(String.Concat("~/PetsPhotos/", id.ToString().Trim(), "/"));

DirectoryInfo di = new DirectoryInfo(path);

if (di != null && di.Exists)

{

foreach (var file in di.GetFiles())

{

file.Delete();

}

di.Delete();

}

return RedirectToAction("List", "Advertizements");

}

else return RedirectToAction("DetailsPartial", "Account", new { id = userid });

}

private int GetMaxNumberInFileNames(string path)

{

Directory.CreateDirectory(path);

DirectoryInfo di = new DirectoryInfo(path);

Regex r = new Regex(@"\d+");

string ddd = di.GetFiles().Select(x => x.Name).FirstOrDefault();

Match teg;

int maxNumberInFileNames = 0;

foreach (string fileName in di.GetFiles().Select(x => x.Name))

{

teg = r.Match(fileName);

if (teg.Success && int.Parse(teg.ToString()) > maxNumberInFileNames)

maxNumberInFileNames = int.Parse(teg.ToString());

}

return maxNumberInFileNames;

}

private int GetMinNumberInFileNames(string path)

{

Directory.CreateDirectory(path);

DirectoryInfo di = new DirectoryInfo(path);

Regex r = new Regex(@"\d+");

string ddd = di.GetFiles().Select(x => x.Name).FirstOrDefault();

Match teg;

int minNumberInFileNames = int.MaxValue;

foreach (string fileName in di.GetFiles().Select(x => x.Name))

{

teg = r.Match(fileName);

if (teg.Success && int.Parse(teg.ToString()) < minNumberInFileNames)

minNumberInFileNames = int.Parse(teg.ToString());

}

return minNumberInFileNames == int.MaxValue ? 0: minNumberInFileNames;

}

private IEnumerable<int> GetPhotoNumberCollection(string path)

{

Directory.CreateDirectory(path);

DirectoryInfo di = new DirectoryInfo(path);

if (di.Exists && di.GetFiles().Length > 0)

{

Regex r = new Regex(@"\d+");

Match teg;

List<int> numbers = new List<int>();

foreach (string fileName in di.GetFiles().Select(x => x.Name))

{

teg = r.Match(fileName);

if (teg.Success && !(numbers.Contains(int.Parse(teg.ToString()))))

numbers.Add(int.Parse(teg.ToString()));

}

return numbers.Count > 0 ? numbers: null;

}

else return null;

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using MyPet.WebUI.Models.ViewModels;

using MyPet.Domain.Abstract;

using MyPet.Domain.Concrete;

using MyPet.Domain.Entities;

using System.Security.Claims;

using Microsoft.Owin.Security;

namespace MyPet.WebUI.Controllers

{

public class RegistrationController: Controller

{

private IRepository<User> userRepository;

public RegistrationController(IRepository<User> repo)

{

this.userRepository = repo;

}

// GET: Registration

public ActionResult New()

{

return View(new UserModel());

}

[HttpPost]

public ActionResult New(UserModel usermodel)

{

if (ModelState.IsValid)

{

User user = new User() { RoleId = 1, Email = usermodel.YourEmail, Password = usermodel.YourPassword };

Profile profile = new Profile() { FirstName = usermodel.FirstName, LastName = usermodel.LastName, Sex = usermodel.Sex };

user.Profile = profile;

userRepository.Create(user);

userRepository.Save();

int userId = userRepository.Find(x => x.Email == user.Email).FirstOrDefault().UserId;

User userDB = userRepository.Find(x => x.UserId == userId).FirstOrDefault();

this.Authorise(userDB);

return RedirectToAction("Details", "Account", new { id=userId});

}

return View(usermodel);

}

private IAuthenticationManager AuthenticationManager

{

get

{

return HttpContext.GetOwinContext().Authentication;

}

}

[ValidateAntiForgeryToken]

private void Authorise(User user)

{

ClaimsIdentity claim = new ClaimsIdentity("ApplicationCookie", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);

claim.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.UserId.ToString(), ClaimValueTypes.String));

claim.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, user.Email, ClaimValueTypes.String));

claim.AddClaim(new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider",

"OWIN Provider", ClaimValueTypes.String));

if (user.Role != null)

claim.AddClaim(new Claim(ClaimsIdentity.DefaultRoleClaimType, user.Role.Name, ClaimValueTypes.String));

AuthenticationManager.SignOut();

AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, claim);

}

// method to check that email does not exist in Database

public JsonResult CheckEmail(string YourEmail)

{

if (userRepository.GetAll().Where(m => m.Email == YourEmail).Count()!=0)

{

return Json("Пользователь с таким email уже зарегистрирован", JsonRequestBehavior.AllowGet);

}

else

{

return Json(true, JsonRequestBehavior.AllowGet);

}

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using MyPet.Domain.Abstract;

using MyPet.Domain.Entities;

using MyPet.WebUI.Models;

namespace MyRepetitor.WebUI.Controllers

{

public class ReviewController: Controller

{

// GET: Review

private IMyPetRepository repository;

private IRepository<Review> revRepository;

public ReviewController(IMyPetRepository repo, IRepository<Review> revrepo)

{

this.repository = repo;

this.revRepository = revrepo;

}

public ActionResult GetReviews(int id)

{

TempData["AdvertizementId"]=id;

return PartialView(revRepository.Find(x => x.AdvertizementId == id).OrderByDescending(x => x.DateAndTime));

}

[HttpPost]

[Authorize]

public PartialViewResult AddComment(Review review)

{

if (review.Text != null && review.AuthorId == User.Identity.GetUserId<int>())

{

review.DateAndTime = DateTime.Now;

revRepository.Create(review);

revRepository.Save();

var reviews = revRepository.Find(x => x.AdvertizementId == review.AdvertizementId).OrderBy(x => x.DateAndTime);

return PartialView("Comments", reviews);

}

return null;

}

}

}

using MyPet.Domain.Entities;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using MyPet.Domain.Abstract;

using System.ComponentModel.DataAnnotations;

using System.Web.Mvc;

using MyPet.WebUI.Models;

namespace MyPet.WebUI.Models

{

public enum SortWay

{

MaxDatesFirst,

MinDatesFirst,

MinPricesFirst,

MaxPricesFirst,

SortByRating

};

public class SearchInfo

{

//[HiddenInput(DisplayValue = false)]

public PagingInfo PagingInfo { get; set; }

public SearchInfo()

{

this.Categories = new List<AdvertizementCategory>();

this.DogBreeds = new List<DogBreed>();

this.Cities = new List<string>();

}

[Display(Name = "Спрос / предложение")]

public bool? IsDemand { get; set; }

[Display(Name = "Пол")]

public bool? Sex { get; set; }

[HiddenInput(DisplayValue = false)]

public decimal? PriceMin { get; set; }

[HiddenInput(DisplayValue = false)]

public decimal? PriceMax { get; set; }

[Display(Name = "С выездом на дом")]

public bool? IsWithDeparture { get; set; }

[Display(Name = "Период")]

public string Period { get; set; }

public DateTime? FromDate

{

get

{

if (this.Period == "за сегодня")

return DateTime.Now.AddDays(-1);

else if (this.Period == "за неделю")

return DateTime.Now.AddDays(-7);

else if (this.Period == "за месяц")

return DateTime.Now.AddMonths(-1);

else return null;

}

}

[Display(Name = "Категория объявления")]

public int? CategoryId { get; set; }

[Display(Name = "Порода")]

public int? DogBreedId { get; set; }

[Display(Name = "Город")]

public string City { get; set; }

[HiddenInput(DisplayValue = false)]

public SortWay WayToSort { get; set; }

public IEnumerable<AdvertizementCategory> Categories { get; set; }

public IEnumerable<DogBreed> DogBreeds { get; set; }

public IEnumerable<string> Cities { get; set; }

public IEnumerable<Advertizement> FilterAdvsWithoutPaging(IEnumerable<Advertizement> parentAdvs)

{

IEnumerable<Advertizement> advs = parentAdvs.Where((x) =>

{

if (this.CategoryId == null || this.CategoryId == 0)

return true;

else return x.CategoryId == this.CategoryId;

}).Where((x) =>

{

if (this.PriceMin == null || this.PriceMax == null)

return true;

else return (x.Price >= this.PriceMin) && (x.Price <= PriceMax);

}).Where((x) =>

{

if (this.DogBreedId == null)

return true;

else return x.DogBreedId == this.DogBreedId;

}).Where((x) =>

{

if (this.City == null)

return true;

else return x.City == this.City;

}).Where((x) =>

{

if (this.FromDate == null)

return true;

else return x.DateAndTime >= this.FromDate;

}).Where((x) =>

{

if (this.IsDemand == null)

return true;

else return x.IsDemand == this.IsDemand;

}).Where((x) =>

{

if (this.Sex == null)

return true;

else return x.Sex == this.Sex;

}).Where((x) =>

{

if (this.IsWithDeparture == null || this.IsWithDeparture == false)

return true;

else return x.IsWithDeparture == this.IsWithDeparture;

});

return advs;

}

public IEnumerable<Advertizement> FilterAdvs(IEnumerable<Advertizement> parentAdvs)

{

IEnumerable<Advertizement> advs = this.FilterAdvsWithoutPaging(parentAdvs);

this.PagingInfo.TotalItems = advs.Count();

if (this.WayToSort == SortWay.MaxDatesFirst)

return advs.OrderByDescending(x => x.DateAndTime).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);

if (this.WayToSort == SortWay.MinDatesFirst)

return advs.OrderBy(x => x.DateAndTime).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);

else if (this.WayToSort == SortWay.MinPricesFirst)

return advs.OrderBy(x => x.Price).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);

else if (this.WayToSort == SortWay.MaxPricesFirst)

return advs.OrderByDescending(x => x.Price).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);

else if (this.WayToSort == SortWay.SortByRating)

return advs.OrderByDescending(x => x.DateAndTime).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);

else return advs.OrderByDescending(x => x.DateAndTime).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);

}

}

}

using System;

using System.Globalization;

using System.Security.Claims;

using System.Security.Principal;

namespace MyPet.WebUI.Models

{

public static class IdentityExtensions

{

public static T GetUserId<T>(this IIdentity identity) where T: IConvertible

{

if (identity == null)

{

throw new ArgumentNullException("identity");

}

var ci = identity as ClaimsIdentity;

if (ci != null)

{

var id = ci.FindFirst(ClaimTypes.NameIdentifier);

if (id != null)

{

return (T)Convert.ChangeType(id.Value, typeof(T), CultureInfo.InvariantCulture);

}

}

return default(T);

}

public static string GetUserRole(this IIdentity identity)

{

if (identity == null)

{

throw new ArgumentNullException("identity");

}

var ci = identity as ClaimsIdentity;

string role = "";

if (ci != null)

{

var id = ci.FindFirst(ClaimsIdentity.DefaultRoleClaimType);

if (id != null)

role = id.Value;

}

return role;

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.ComponentModel.DataAnnotations.Schema;

using System.ComponentModel.DataAnnotations;

namespace MyPet.WebUI.Models.ViewModels

{

public class UserModel

{

[Required(ErrorMessage="Поле 'e-mail' является обязательным для заполнения")]

[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Некорректный адрес")]

[System.Web.Mvc.Remote("CheckEmail", "Registration")]

[Display(Name = "Email")]

public string YourEmail { get; set; }

[Required(ErrorMessage = "Поле 'пароль' является обязательным для заполнения")]

//[DataType(DataType.Password)]

[StringLength(25, MinimumLength = 6, ErrorMessage="Пароль должен быть не менее 6 символов")]

[Display(Name = "Пароль")]

[UIHint("Password")]

public string YourPassword { get; set; }

[Compare("YourPassword", ErrorMessage = "Пароли не совпадают")]

//[DataType(DataType.Password)]

[Display(Name = "Подтвердите пароль")]

[UIHint("Password")]

public string YourPasswordConfirm { get; set; }

[Display(Name="Имя")]

[Required(ErrorMessage = "Поле 'Имя' является обязательным для заполнения")]

[StringLength(25, MinimumLength = 2, ErrorMessage = "Поле 'Имя' слишком короткое")]

public string FirstName { get; set; }

[StringLength(25, MinimumLength = 2, ErrorMessage = "Поле 'Фамилия' слишком короткое")]

[Display(Name = "Фамилия")]

[Required(ErrorMessage = "Поле 'Фамилия' является обязательным для заполнения")]

public string LastName { get; set; }

[Display(Name = "Пол")]

public bool Sex { get; set; }

[Range(typeof(bool), "true", "true", ErrorMessage="Ознакомьтесь и согласитесь с условиями")]

public bool Accept { get; set; }

}

}

Приложение Б

Трассировочная таблица

Таблица Б - Трассировочная таблица

Пользовательское требование

Функция системы

Вариант использования

1

Регистрация

1.1

1.2

1.3

1.4

Ввод личных данных

Ввод e-mail

Ввод пароля

Подтверждение пароля

Ввод личных данных

Ввод e-mail

Ввод пароля

Подтверждение пароля

2

Авторизация

2.1

2.2

Ввод электронного адреса

Ввод пароля

Ввод электронного адреса

Ввод пароля

3

Работа с персональными данными

3.1

3.2

Просмотр личных данных

Редактирование и сохранение данных

Просмотр личных данных

Редактирование и сохранение данных

4

Работа с питомцами

4.1

4.2

4.34.4

Просмотр данных о питомцах

Редактирование и сохранение данных о питомцах

Добавление питомца

Удаление питомца

Просмотр данных о питомцах

Редактирование и сохранение данных о питомцах

Добавление питомца

Удаление питомца

5

Работа с личными объявлениями

5.1

5.2

5.3

5.4

5.5

Просмотр данных объявлений

Редактирование и сохранение данных объявлений

Добавление объявления

Удаление объявления

Просмотр отзывов

Просмотр данных объявлений

Редактирование и сохранение данных объявлений

Добавление объявления

Удаление объявления

Просмотр отзывов

6

Работа с сообщениями

6.1

6.2

6.3

Просмотр списка диалогов

Отправка сообщения

Получение сообщения

Просмотр списка диалогов

Отправка сообщения

Получение сообщения

7

Поиск объявлений по фильтрам

7.1

7.2

7.3

Задание фильтров

Выбор способа сортировки «Сортировать по»

Поиск подходящих объявлений

Задание фильтров

Выбор способа сортировки «Сортировать по»

Поиск подходящих объявлений

8

Просмотр результатов поиска

8.1

8.2

8.3

8.4

Просмотр карты с метками объявлений

Просмотр информации об объявлении

Оставление отзыва и оценки объявлению

Отправка сообщения автору объявления

Просмотр карты с метками объявлений

Просмотр информации об объявлении

Оставление отзыва и оценки объявлению

Отправка сообщения автору объявления

Размещено на Allbest.ru


Подобные документы

  • Сравнение показателей ресурсов cenotavr.by и petonik.com. Редактирование объявлений, задание критериев отбора объявлений по фильтрам. Разработка проекта программного обеспечения для сайта услуг для животных, алгоритм редактирования и удаления питомца.

    дипломная работа [2,8 M], добавлен 09.07.2017

  • Цели и задачи фирм по обмену и продаже жилья, основные моменты работы фирмы для создания системы автоматизации учёта данных о заявках и клиентах. Функциональная модель приложения, разработка инфологической модели и создание реляционной структуры.

    курсовая работа [389,8 K], добавлен 20.03.2012

  • Программные средства, которые помогают манипулировать и управлять данными. Приемы создания и редактирования баз данных в СУБД MySQL. Способы и средства доступа и манипулирования данными. Создание, удаление, редактирование таблиц данных и их элементов.

    практическая работа [1,2 M], добавлен 14.03.2013

  • Анализ предметной области. Проектирование и разработка базы данных и интерфейса в виде набора Web-страниц для отображения, создания, удаления и редактирования записей базы данных. Аппаратное и программное обеспечение системы. Алгоритм работы программы.

    курсовая работа [3,0 M], добавлен 12.01.2016

  • Особенность формирования реляционной модели данных. Создание таблиц в программе. Характеристика разработки web-интерфейса. Анализ вывода информации о каждом сотруднике. Образование листинга программных кодов. Суть удаления и редактирования извещений.

    курсовая работа [621,5 K], добавлен 14.01.2018

  • Изучение областей использования вычислительной техники, истории систем управления данными во внешней памяти. Анализ разработки ряда стандартов в рамках языков описания и манипулирования данными. Обзор технологий по обмену данными между различными СУБД.

    презентация [263,2 K], добавлен 30.05.2012

  • Проектирование концептуальной, логической и физической модели базы данных. Формирование сущностей и связей между ними. Создание форм с функциями добавления, редактирования, удаления, поиска, печати. Разработка клиентской части БД с помощью среды Lazarus.

    курсовая работа [1,3 M], добавлен 05.04.2015

  • Разработка программного продукта - базы данных "Экскурсия" в интегрированной среде программирования C++ Builder 6. Определение порядка просмотра данных базы, их редактирования и удаления. Особенности руководства пользователя и общего интерфейса программы.

    курсовая работа [2,4 M], добавлен 03.11.2013

  • Средства организации блогов, разновидности CMS используемых для разработки и сопровождения блогов, их достоинства и недостатки. Общий алгоритм работы программного средства и алгоритмы работы с данными. Программное конструирование индивидуальных блогов.

    дипломная работа [3,6 M], добавлен 10.07.2012

  • Требования к аппаратным и операционным ресурсам. Логическая и физическая организация. Состав основных классов проекта. Технико-экономическое обоснование разработки программного средства. Задержки при обработке данных. Разработка интерфейса приложения.

    дипломная работа [4,4 M], добавлен 16.06.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.