Commit 97a3f7a5c2c5b3864a8e7d20eb6d7b74c3af046d

Authored by Yarik
1 parent c386d9eb

Authority and Contractor

src/MapsDb/DataService/AuthorityDs.cs
... ... @@ -30,6 +30,8 @@ namespace MapsDb.DataService
30 30 .Include(d=>d.Road)
31 31 .Include(d=>d.CrossSection);
32 32  
  33 + data = Filtering(pagination.filter, data);
  34 +
33 35 IQueryable<AuthorityEditDsM> result = data
34 36 .Select(Authority => Mapper.Map<AuthorityEditDsM>(Authority))
35 37 .Skip(pagination.from)
... ... @@ -81,5 +83,86 @@ namespace MapsDb.DataService
81 83 _context.Authority.Remove(authority);
82 84 return await _context.SaveChangesAsync();
83 85 }
  86 + public IQueryable<Authority> Filtering(string filters, IQueryable<Authority> data){
  87 + if(filters != null){
  88 + string[] FilterWords = filters.Split(';').Where(x => !string.IsNullOrEmpty(x)).ToArray();
  89 + foreach(string word in FilterWords){
  90 + string[] filter = Regex.Split(word.Substring(1), "(.*)_(.*)");
  91 + if(filter.Length < 3 ){
  92 + continue;
  93 + }
  94 + string field = char.ToUpper(filter[1][0]) + filter[1].Substring(1);
  95 + string param = filter[2].ToLower();
  96 + if(word.StartsWith("$")){
  97 + data = FilterByEndWith(field, param, data);
  98 + }
  99 + else if(word.StartsWith("^")){
  100 + data = FilterByStartWith(field, param, data);
  101 + }
  102 + else if(word.StartsWith("*")){
  103 + data = FilterByComtains(field, param, data);
  104 + }
  105 + else if(word.StartsWith("!")){
  106 + data = FilterByNotEquals(field, param, data);
  107 + }
  108 + else if(word.StartsWith("=")){
  109 + data = FilterByEquals(field, param, data);
  110 + }
  111 + }
  112 +
  113 + }
  114 + return data;
  115 + }
  116 + public IQueryable<Authority> FilterByComtains(string field, string param, IQueryable<Authority> data){
  117 + switch(field){
  118 + case "RoadId":
  119 + return data.Where(i => i.Road.Name != null && i.Road.Name.ToLower().Contains(param) );
  120 + case "CrossSectionId":
  121 + return data.Where(i => i.CrossSection.Id.ToString().ToLower().Contains(param) );
  122 + default:
  123 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower().Contains(param) );
  124 + }
  125 + }
  126 + public IQueryable<Authority> FilterByEquals(string field, string param, IQueryable<Authority> data){
  127 + switch(field){
  128 + case "RoadId":
  129 + return data.Where(i => i.Road.Id.ToString().ToLower() == param );
  130 + case "CrossSectionId":
  131 + return data.Where(i => i.CrossSection.Id.ToString().ToLower() == param );
  132 + default:
  133 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower() == param );
  134 + }
  135 +
  136 + }
  137 + public IQueryable<Authority> FilterByNotEquals(string field, string param, IQueryable<Authority> data){
  138 + switch(field){
  139 + case "RoadId":
  140 + return data.Where(i => i.Road.Name != null && i.Road.Name.ToLower() != param );
  141 + case "CrossSectionId":
  142 + return data.Where(i => i.CrossSection.Id.ToString().ToLower() != param );
  143 + default:
  144 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower() != param );
  145 + }
  146 + }
  147 + public IQueryable<Authority> FilterByStartWith(string field, string param, IQueryable<Authority> data){
  148 + switch(field){
  149 + case "RoadId":
  150 + return data.Where(i => i.Road.Name != null && i.Road.Name.ToLower().StartsWith(param) );
  151 + case "CrossSectionId":
  152 + return data.Where(i => i.CrossSection.Id.ToString().ToLower().StartsWith(param) );
  153 + default:
  154 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower().StartsWith(param) );
  155 + }
  156 + }
  157 + public IQueryable<Authority> FilterByEndWith(string field, string param, IQueryable<Authority> data){
  158 + switch(field){
  159 + case "RoadId":
  160 + return data.Where(i => i.Road.Name != null && i.Road.Name.ToLower().EndsWith(param) );
  161 + case "CrossSectionId":
  162 + return data.Where(i => i.CrossSection.Id.ToString().ToLower().EndsWith(param) );
  163 + default:
  164 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower().EndsWith(param) );
  165 + }
  166 + }
84 167 }
85 168 }
86 169 \ No newline at end of file
... ...
src/MapsDb/DataService/ContractorDs.cs
... ... @@ -30,6 +30,8 @@ namespace MapsDb.DataService
30 30 .Include(d=>d.Road)
31 31 .Include(d=>d.CrossSection);
32 32  
  33 + data = Filtering(pagination.filter, data);
  34 +
33 35 IQueryable<ContractorEditDsM> result = data
34 36 .Select(Contractor => Mapper.Map<ContractorEditDsM>(Contractor))
35 37 .Skip(pagination.from)
... ... @@ -81,5 +83,86 @@ namespace MapsDb.DataService
81 83 _context.Contractor.Remove(contractor);
82 84 return await _context.SaveChangesAsync();
83 85 }
  86 + public IQueryable<Contractor> Filtering(string filters, IQueryable<Contractor> data){
  87 + if(filters != null){
  88 + string[] FilterWords = filters.Split(';').Where(x => !string.IsNullOrEmpty(x)).ToArray();
  89 + foreach(string word in FilterWords){
  90 + string[] filter = Regex.Split(word.Substring(1), "(.*)_(.*)");
  91 + if(filter.Length < 3 ){
  92 + continue;
  93 + }
  94 + string field = char.ToUpper(filter[1][0]) + filter[1].Substring(1);
  95 + string param = filter[2].ToLower();
  96 + if(word.StartsWith("$")){
  97 + data = FilterByEndWith(field, param, data);
  98 + }
  99 + else if(word.StartsWith("^")){
  100 + data = FilterByStartWith(field, param, data);
  101 + }
  102 + else if(word.StartsWith("*")){
  103 + data = FilterByComtains(field, param, data);
  104 + }
  105 + else if(word.StartsWith("!")){
  106 + data = FilterByNotEquals(field, param, data);
  107 + }
  108 + else if(word.StartsWith("=")){
  109 + data = FilterByEquals(field, param, data);
  110 + }
  111 + }
  112 +
  113 + }
  114 + return data;
  115 + }
  116 + public IQueryable<Contractor> FilterByComtains(string field, string param, IQueryable<Contractor> data){
  117 + switch(field){
  118 + case "RoadId":
  119 + return data.Where(i => i.Road.Name != null && i.Road.Name.ToLower().Contains(param) );
  120 + case "CrossSectionId":
  121 + return data.Where(i => i.CrossSection.Id.ToString().ToLower().Contains(param) );
  122 + default:
  123 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower().Contains(param) );
  124 + }
  125 + }
  126 + public IQueryable<Contractor> FilterByEquals(string field, string param, IQueryable<Contractor> data){
  127 + switch(field){
  128 + case "RoadId":
  129 + return data.Where(i => i.Road.Id.ToString().ToLower() == param );
  130 + case "CrossSectionId":
  131 + return data.Where(i => i.CrossSection.Id.ToString().ToLower() == param );
  132 + default:
  133 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower() == param );
  134 + }
  135 +
  136 + }
  137 + public IQueryable<Contractor> FilterByNotEquals(string field, string param, IQueryable<Contractor> data){
  138 + switch(field){
  139 + case "RoadId":
  140 + return data.Where(i => i.Road.Name != null && i.Road.Name.ToLower() != param );
  141 + case "CrossSectionId":
  142 + return data.Where(i => i.CrossSection.Id.ToString().ToLower() != param );
  143 + default:
  144 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower() != param );
  145 + }
  146 + }
  147 + public IQueryable<Contractor> FilterByStartWith(string field, string param, IQueryable<Contractor> data){
  148 + switch(field){
  149 + case "RoadId":
  150 + return data.Where(i => i.Road.Name != null && i.Road.Name.ToLower().StartsWith(param) );
  151 + case "CrossSectionId":
  152 + return data.Where(i => i.CrossSection.Id.ToString().ToLower().StartsWith(param) );
  153 + default:
  154 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower().StartsWith(param) );
  155 + }
  156 + }
  157 + public IQueryable<Contractor> FilterByEndWith(string field, string param, IQueryable<Contractor> data){
  158 + switch(field){
  159 + case "RoadId":
  160 + return data.Where(i => i.Road.Name != null && i.Road.Name.ToLower().EndsWith(param) );
  161 + case "CrossSectionId":
  162 + return data.Where(i => i.CrossSection.Id.ToString().ToLower().EndsWith(param) );
  163 + default:
  164 + return data.Where(i => Convert.ToString(i.GetType().GetProperty(field).GetValue(i, null)).ToLower().EndsWith(param) );
  165 + }
  166 + }
84 167 }
85 168 }
86 169 \ No newline at end of file
... ...