Merge branch 'vnext' of https://github.com/pazof/yavsc.git
This commit is contained in:
commit
02cce33ad6
84 changed files with 350 additions and 278 deletions
|
|
@ -1,6 +1,8 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.Data.Entity;
|
||||
|
|
@ -47,7 +49,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
// PUT: api/ActivityApi/5
|
||||
[HttpPut("{id}")]
|
||||
[HttpPut("{id}"),Authorize("AdministratorOnly")]
|
||||
public async Task<IActionResult> PutActivity([FromRoute] string id, [FromBody] Activity activity)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
|
|
@ -64,7 +66,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -82,7 +84,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
// POST: api/ActivityApi
|
||||
[HttpPost]
|
||||
[HttpPost,Authorize("AdministratorOnly")]
|
||||
public async Task<IActionResult> PostActivity([FromBody] Activity activity)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
|
|
@ -93,7 +95,7 @@ namespace Yavsc.Controllers
|
|||
_context.Activities.Add(activity);
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -111,7 +113,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
// DELETE: api/ActivityApi/5
|
||||
[HttpDelete("{id}")]
|
||||
[HttpDelete("{id}"),Authorize("AdministratorOnly")]
|
||||
public async Task<IActionResult> DeleteActivity([FromRoute] string id)
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
|
|
@ -126,7 +128,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.Activities.Remove(activity);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
|
||||
return Ok(activity);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
|
|
@ -63,7 +64,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -92,7 +93,7 @@ namespace Yavsc.Controllers
|
|||
_context.Users.Add(applicationUser);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -125,7 +126,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.Users.Remove(applicationUser);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(applicationUser);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -107,7 +107,7 @@ namespace Yavsc.Controllers
|
|||
_context.BlackListed.Add(blackListed);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -143,7 +143,7 @@ namespace Yavsc.Controllers
|
|||
return HttpBadRequest();
|
||||
|
||||
_context.BlackListed.Remove(blackListed);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(blackListed);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -109,7 +109,7 @@ namespace Yavsc.Controllers
|
|||
_context.BlogACL.Add(circleAuthorizationToBlogPost);
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -145,7 +145,7 @@ namespace Yavsc.Controllers
|
|||
return HttpNotFound();
|
||||
}
|
||||
_context.BlogACL.Remove(circleAuthorizationToBlogPost);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
|
||||
return Ok(circleAuthorizationToBlogPost);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.Data.Entity;
|
||||
|
|
@ -62,7 +63,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -91,7 +92,7 @@ namespace Yavsc.Controllers
|
|||
_context.Blogspot.Add(blog);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -124,7 +125,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.Blogspot.Remove(blog);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(blog);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -136,7 +136,7 @@ namespace Yavsc.Controllers
|
|||
_context.Commands.Add(bookQuery);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -171,7 +171,7 @@ namespace Yavsc.Controllers
|
|||
if (bookQuery.ClientId != uid) return HttpNotFound();
|
||||
|
||||
_context.Commands.Remove(bookQuery);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(bookQuery);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
|
|
@ -64,7 +65,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -93,7 +94,7 @@ namespace Yavsc.Controllers
|
|||
_context.Circle.Add(circle);
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -126,7 +127,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.Circle.Remove(circle);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
|
||||
return Ok(circle);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.Data.Entity;
|
||||
|
|
@ -43,7 +44,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -72,7 +73,7 @@ namespace Yavsc.Controllers
|
|||
_context.ClientProviderInfo.Add(clientProviderInfo);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -105,7 +106,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.ClientProviderInfo.Remove(clientProviderInfo);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(clientProviderInfo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -118,7 +118,7 @@ namespace Yavsc.Controllers
|
|||
_context.DimissClicked.Add(dimissClicked);
|
||||
try
|
||||
{
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -155,7 +155,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.DimissClicked.Remove(dimissClicked);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
|
||||
return Ok(dimissClicked);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ namespace Yavsc.Controllers
|
|||
var entry = _context.Attach(estimate);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -143,7 +143,7 @@ namespace Yavsc.Controllers
|
|||
*/
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -184,7 +184,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
}
|
||||
_context.Estimates.Remove(estimate);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(estimate);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -100,7 +100,7 @@ namespace Yavsc.Controllers
|
|||
_context.EstimateTemplates.Add(estimateTemplate);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -137,7 +137,7 @@ namespace Yavsc.Controllers
|
|||
return new HttpStatusCodeResult(StatusCodes.Status403Forbidden);
|
||||
|
||||
_context.EstimateTemplates.Remove(estimateTemplate);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(estimateTemplate);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ namespace Yavsc.ApiControllers
|
|||
foreach (var f in Request.Form.Files)
|
||||
{
|
||||
var item = user.ReceiveUserFile(root, f);
|
||||
dbContext.SaveChanges();
|
||||
dbContext.SaveChanges(User.GetUserId());
|
||||
yield return item;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ public class GCMController : Controller
|
|||
alreadyRegisteredDevice.Platform = declaration.Platform;
|
||||
alreadyRegisteredDevice.Version = declaration.Version;
|
||||
_context.Update(alreadyRegisteredDevice);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -56,7 +56,7 @@ public class GCMController : Controller
|
|||
declaration.DeclarationDate = DateTime.Now;
|
||||
declaration.DeviceOwnerId = uid;
|
||||
_context.GCMDevices.Add(declaration as GoogleCloudMobileDeclaration);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
var latestActivityUpdate = _context.Activities.Max(a=>a.DateModified);
|
||||
return Json(new {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.Data.Entity;
|
||||
|
|
@ -62,7 +63,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -91,7 +92,7 @@ namespace Yavsc.Controllers
|
|||
_context.MusicalPreferences.Add(musicalPreference);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -124,7 +125,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.MusicalPreferences.Remove(musicalPreference);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(musicalPreference);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.Data.Entity;
|
||||
|
|
@ -63,7 +64,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -92,7 +93,7 @@ namespace Yavsc.Controllers
|
|||
_context.MusicalTendency.Add(musicalTendency);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -125,7 +126,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.MusicalTendency.Remove(musicalTendency);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(musicalTendency);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,14 +32,15 @@ namespace Yavsc.ApiControllers
|
|||
public PdfEstimateController(
|
||||
IAuthorizationService authorizationService,
|
||||
ILoggerFactory loggerFactory,
|
||||
ApplicationDbContext context)
|
||||
IStringLocalizer<Yavsc.Resources.YavscLocalisation> SR,
|
||||
ApplicationDbContext context)
|
||||
{
|
||||
this.authorizationService = authorizationService;
|
||||
dbContext = context;
|
||||
logger = loggerFactory.CreateLogger<PdfEstimateController>();
|
||||
this._localizer = SR;
|
||||
}
|
||||
|
||||
|
||||
[HttpGet("get/{id}", Name = "Get"), Authorize]
|
||||
public async Task<IActionResult> Get(long id)
|
||||
{
|
||||
|
|
@ -89,10 +90,12 @@ namespace Yavsc.ApiControllers
|
|||
[HttpPost("prosign/{id}")]
|
||||
public async Task<IActionResult> ProSign(long id)
|
||||
{
|
||||
var uid = User.GetUserId();
|
||||
var estimate = dbContext.Estimates.Include(
|
||||
e=>e.Query
|
||||
).FirstOrDefault(e=>e.Id == id && e.OwnerId == uid );
|
||||
var estimate = dbContext.Estimates.
|
||||
Include(e=>e.Client).Include(e=>e.Client.Devices)
|
||||
.Include(e=>e.Bill).Include(e=>e.Owner).Include(e=>e.Owner.Performer)
|
||||
.FirstOrDefault(e=>e.Id == id);
|
||||
if (estimate == null)
|
||||
return new BadRequestResult();
|
||||
if (!await authorizationService.AuthorizeAsync(User, estimate, new ViewRequirement()))
|
||||
{
|
||||
return new ChallengeResult();
|
||||
|
|
@ -101,11 +104,16 @@ namespace Yavsc.ApiControllers
|
|||
return new BadRequestResult();
|
||||
User.ReceiveProSignature(id,Request.Form.Files[0],"pro");
|
||||
estimate.ProviderValidationDate = DateTime.Now;
|
||||
dbContext.SaveChanges();
|
||||
dbContext.SaveChanges(User.GetUserId());
|
||||
// Notify the client
|
||||
var locstr = _localizer["EstimationMessageToClient"];
|
||||
|
||||
var yaev = new EstimationEvent(dbContext,estimate,_localizer);
|
||||
var regids = estimate.Client.Devices.Select(d => d.GCMRegistrationId);
|
||||
|
||||
var regids = estimate.Client.Devices.Select(d => d.GCMRegistrationId).ToArray();
|
||||
logger.LogWarning($"new regids: {regids}");
|
||||
var grep = await _GCMSender.NotifyEstimateAsync(_googleSettings,regids,yaev);
|
||||
logger.LogWarning($"grep: {grep}");
|
||||
return Ok (new { ProviderValidationDate = estimate.ProviderValidationDate, GCMSent = grep.success });
|
||||
}
|
||||
|
||||
|
|
@ -130,7 +138,8 @@ namespace Yavsc.ApiControllers
|
|||
{
|
||||
var uid = User.GetUserId();
|
||||
var estimate = dbContext.Estimates.Include( e=>e.Query
|
||||
).FirstOrDefault( e=> e.Id == id && e.Query.ClientId == uid );
|
||||
).Include(e=>e.Owner).Include(e=>e.Owner.Performer).Include(e=>e.Client)
|
||||
.FirstOrDefault( e=> e.Id == id && e.Query.ClientId == uid );
|
||||
if (!await authorizationService.AuthorizeAsync(User, estimate, new ViewRequirement()))
|
||||
{
|
||||
return new ChallengeResult();
|
||||
|
|
@ -139,7 +148,7 @@ namespace Yavsc.ApiControllers
|
|||
return new BadRequestResult();
|
||||
User.ReceiveProSignature(id,Request.Form.Files[0],"cli");
|
||||
estimate.ClientValidationDate = DateTime.Now;
|
||||
dbContext.SaveChanges();
|
||||
dbContext.SaveChanges(User.GetUserId());
|
||||
return Ok (new { ClientValidationDate = estimate.ClientValidationDate });
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using System.Linq;
|
||||
using Yavsc.Models;
|
||||
using Yavsc.Models.Workflow;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.Data.Entity;
|
||||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
using Models;
|
||||
[Produces("application/json")]
|
||||
[Route("api/performers")]
|
||||
public class PerformersApiController : Controller
|
||||
|
|
@ -24,15 +23,32 @@ namespace Yavsc.Controllers
|
|||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[Authorize(Roles="Performer")]
|
||||
[Authorize(Roles="Performer"),HttpGet("{id}")]
|
||||
public IActionResult Get(string id)
|
||||
{
|
||||
var pfr = dbContext.Performers.Include(
|
||||
p=>p.OrganizationAddress
|
||||
).Include(
|
||||
p=>p.Performer
|
||||
).Include(
|
||||
p=>p.Performer.Posts
|
||||
).SingleOrDefault(p=> p.PerformerId == id);
|
||||
if (id==null)
|
||||
{
|
||||
ModelState.AddModelError("id","Specifier un code activité");
|
||||
return new BadRequestObjectResult(ModelState);
|
||||
ModelState.AddModelError("id","Specifier un identifiant de prestataire valide");
|
||||
}
|
||||
return Ok(dbContext.Performers.Where(p=>p.Active && p.PerformerId == id));
|
||||
else {
|
||||
var uid = User.GetUserId();
|
||||
if (!User.IsInRole("Administrator"))
|
||||
if (uid != id) return new ChallengeResult();
|
||||
|
||||
if (!pfr.Active)
|
||||
{
|
||||
ModelState.AddModelError("id","Prestataire désactivé.");
|
||||
}
|
||||
}
|
||||
if (ModelState.IsValid) return Ok(pfr);
|
||||
return new BadRequestObjectResult(ModelState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -39,7 +39,7 @@ namespace Yavsc.Controllers
|
|||
return HttpBadRequest();
|
||||
|
||||
blogpost.Rate = rate;
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@ using Microsoft.Data.Entity;
|
|||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
using System.Security.Claims;
|
||||
using Models;
|
||||
using Models.Relationship;
|
||||
|
||||
|
||||
[Produces("application/json")]
|
||||
[Route("~/api/PostTagsApi")]
|
||||
public class PostTagsApiController : Controller
|
||||
|
|
@ -64,7 +65,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -93,7 +94,7 @@ namespace Yavsc.Controllers
|
|||
_context.TagsDomain.Add(postTag);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -126,7 +127,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.TagsDomain.Remove(postTag);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(postTag);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
|
|
@ -64,7 +65,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -93,7 +94,7 @@ namespace Yavsc.Controllers
|
|||
_context.Products.Add(product);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -126,7 +127,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.Products.Remove(product);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(product);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
|
|
@ -64,7 +65,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -93,7 +94,7 @@ namespace Yavsc.Controllers
|
|||
_context.Services.Add(service);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -126,7 +127,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.Services.Remove(service);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(service);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ using Yavsc.Models;
|
|||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
using System.Security.Claims;
|
||||
using Models.Relationship;
|
||||
[Produces("application/json")]
|
||||
[Route("api/TagsApi")]
|
||||
|
|
@ -63,7 +64,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateConcurrencyException)
|
||||
{
|
||||
|
|
@ -92,7 +93,7 @@ namespace Yavsc.Controllers
|
|||
_context.Tags.Add(tag);
|
||||
try
|
||||
{
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
catch (DbUpdateException)
|
||||
{
|
||||
|
|
@ -125,7 +126,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
|
||||
_context.Tags.Remove(tag);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
return Ok(tag);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -241,7 +241,7 @@ namespace Yavsc.Controllers
|
|||
var ninfo = _dbContext.UserLogins.First(l=>l.ProviderKey == info.ProviderKey && l.LoginProvider == info.LoginProvider);
|
||||
ninfo.ProviderDisplayName = info.ProviderDisplayName;
|
||||
_dbContext.Entry(ninfo).State = EntityState.Modified;
|
||||
_dbContext.SaveChanges();
|
||||
_dbContext.SaveChanges(User.GetUserId());
|
||||
|
||||
return Redirect(returnUrl);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ using Microsoft.Extensions.Logging;
|
|||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
using System.Security.Claims;
|
||||
using Models;
|
||||
using Models.Workflow;
|
||||
|
||||
|
|
@ -137,7 +138,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Activities.Add(activity);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
SetSettingClasseInfo();
|
||||
|
|
@ -174,7 +175,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(activity);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(activity);
|
||||
|
|
@ -205,7 +206,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
Activity activity = _context.Activities.Single(m => m.Code == id);
|
||||
_context.Activities.Remove(activity);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Blogspot.Add(blog);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ModelState.AddModelError("Unknown","Invalid Blog posted ...");
|
||||
|
|
@ -188,7 +188,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
// saves the change
|
||||
_context.Update(blog);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
ViewData["StatusMessage"] = "Post modified";
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
|
|
@ -231,7 +231,7 @@ namespace Yavsc.Controllers
|
|||
if (auth.Result)
|
||||
{
|
||||
_context.Blogspot.Remove(blog);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
}
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.Data.Entity;
|
||||
|
|
@ -53,7 +54,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Circle.Add(circle);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(circle);
|
||||
|
|
@ -83,7 +84,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(circle);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(circle);
|
||||
|
|
@ -114,7 +115,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
Circle circle = await _context.Circle.SingleAsync(m => m.Id == id);
|
||||
_context.Circle.Remove(circle);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.CircleMembers.Add(circleMember);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ViewData["CircleId"] = new SelectList(_context.Circle, "Id", "Name", circleMember.CircleId);
|
||||
|
|
@ -102,7 +102,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(circleMember);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ViewData["CircleId"] = new SelectList(_context.Circle, "Id", "Circle", circleMember.CircleId);
|
||||
|
|
@ -135,7 +135,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
CircleMember circleMember = await _context.CircleMembers.SingleAsync(m => m.MemberId == id);
|
||||
_context.CircleMembers.Remove(circleMember);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using Microsoft.Data.Entity;
|
|||
using System.Collections.Generic;
|
||||
using Yavsc.Models;
|
||||
using Yavsc.Models.Auth;
|
||||
using System.Security.Claims;
|
||||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
|
|
@ -56,7 +57,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
client.Id = Guid.NewGuid().ToString();
|
||||
_context.Applications.Add(client);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
SetAppTypesInputValues();
|
||||
|
|
@ -100,7 +101,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(client);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(client);
|
||||
|
|
@ -131,7 +132,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
Client client = await _context.Applications.SingleAsync(m => m.Id == id);
|
||||
_context.Applications.Remove(client);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
|
|
@ -57,7 +58,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.WorkflowProviders.Add(coWorking);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ViewData["PerformerId"] = new SelectList(_context.Performers, "PerformerId", "Performer", coWorking.PerformerId);
|
||||
|
|
@ -91,7 +92,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(coWorking);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ViewData["PerformerId"] = new SelectList(_context.Performers, "PerformerId", "Performer", coWorking.PerformerId);
|
||||
|
|
@ -124,7 +125,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
CoWorking coWorking = await _context.WorkflowProviders.SingleAsync(m => m.Id == id);
|
||||
_context.WorkflowProviders.Remove(coWorking);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.Data.Entity;
|
||||
|
|
@ -52,7 +53,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Color.Add(color);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(color);
|
||||
|
|
@ -82,7 +83,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(color);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(color);
|
||||
|
|
@ -113,7 +114,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
Color color = await _context.Color.SingleAsync(m => m.Id == id);
|
||||
_context.Color.Remove(color);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ namespace Yavsc.Controllers
|
|||
}
|
||||
else _context.Attach<Location>(command.Location);
|
||||
_context.BookQueries.Add(command, GraphBehavior.IncludeDependents);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
|
||||
var yaev = command.CreateEvent(_localizer);
|
||||
MessageWithPayloadResponse grep = null;
|
||||
|
|
@ -222,7 +222,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(command);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(command);
|
||||
|
|
@ -253,7 +253,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
BookQuery command = _context.BookQueries.Single(m => m.Id == id);
|
||||
_context.BookQueries.Remove(command);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
|
|
@ -59,7 +60,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.CommandForm.Add(commandForm);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
SetViewBag(commandForm);
|
||||
|
|
@ -91,7 +92,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(commandForm);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
SetViewBag(commandForm);
|
||||
|
|
@ -123,7 +124,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
CommandForm commandForm = await _context.CommandForm.SingleAsync(m => m.Id == id);
|
||||
_context.CommandForm.Remove(commandForm);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.UserActivities.Add(userActivity);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ViewBag.DoesCode = new SelectList(_context.Activities, "Code", "Name", userActivity.DoesCode);
|
||||
|
|
@ -120,7 +120,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(userActivity);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ViewData["DoesCode"] = new SelectList(_context.Activities, "Code", "Does", userActivity.DoesCode);
|
||||
|
|
@ -161,7 +161,7 @@ namespace Yavsc.Controllers
|
|||
return RedirectToAction("Index");
|
||||
}
|
||||
_context.UserActivities.Remove(userActivity);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,8 @@ namespace Yavsc.Controllers
|
|||
.Include(e=>e.Query.PerformerProfile.Performer)
|
||||
.Where(
|
||||
e=>e.OwnerId == uid || e.ClientId == uid
|
||||
).ToList());
|
||||
).OrderByDescending(e=>e.ProviderValidationDate)
|
||||
.ToList());
|
||||
}
|
||||
|
||||
// GET: Estimate/Details/5
|
||||
|
|
@ -101,7 +102,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
_context.Estimates
|
||||
.Add(estimate);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
var query = _context.BookQueries.FirstOrDefault(
|
||||
q=>q.Id == estimate.CommandId
|
||||
);
|
||||
|
|
@ -177,7 +178,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(estimate);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(estimate);
|
||||
|
|
@ -210,7 +211,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
Estimate estimate = _context.Estimates.Single(m => m.Id == id);
|
||||
_context.Estimates.Remove(estimate);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.Data.Entity;
|
||||
|
|
@ -52,7 +53,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Form.Add(form);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(form);
|
||||
|
|
@ -82,7 +83,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(form);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(form);
|
||||
|
|
@ -113,7 +114,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
Form form = await _context.Form.SingleAsync(m => m.Id == id);
|
||||
_context.Form.Remove(form);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
_context.BookQueries.Update(bookQuery);
|
||||
}
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
// TODO Send sys notifications &
|
||||
// notify the user (make him a basket badge)
|
||||
return View("Index");
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
|
|
@ -57,7 +58,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.HairTaint.Add(hairTaint);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ViewBag.ColorId = new SelectList(_context.Color, "Id", "Name", hairTaint.ColorId);
|
||||
|
|
@ -89,7 +90,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(hairTaint);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
ViewBag.ColorId = new SelectList(_context.Color, "Id", "Name", hairTaint.ColorId);
|
||||
|
|
@ -121,7 +122,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
HairTaint hairTaint = await _context.HairTaint.SingleAsync(m => m.Id == id);
|
||||
_context.HairTaint.Remove(hairTaint);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,17 +4,17 @@ using Microsoft.AspNet.Http.Features;
|
|||
using Microsoft.AspNet.Diagnostics;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.AspNet.Hosting;
|
||||
using Yavsc.Models;
|
||||
using Microsoft.AspNet.Identity;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.Data.Entity;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNet.Http;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
using Models;
|
||||
|
||||
[ServiceFilter(typeof(LanguageActionFilter)),AllowAnonymous]
|
||||
public class HomeController : Controller
|
||||
{
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ namespace Yavsc.Controllers
|
|||
return new ChallengeResult();
|
||||
|
||||
_context.Instrumentation.Add(model);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(model);
|
||||
|
|
@ -103,7 +103,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(musicianSettings);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(musicianSettings);
|
||||
|
|
@ -142,7 +142,7 @@ namespace Yavsc.Controllers
|
|||
|
||||
|
||||
_context.Instrumentation.Remove(musicianSettings);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using Microsoft.AspNet.Mvc;
|
|||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
using System.Security.Claims;
|
||||
using Models;
|
||||
using Models.Musical;
|
||||
public class InstrumentsController : Controller
|
||||
|
|
@ -51,7 +52,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Instrument.Add(instrument);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(instrument);
|
||||
|
|
@ -81,7 +82,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(instrument);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(instrument);
|
||||
|
|
@ -112,7 +113,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
Instrument instrument = _context.Instrument.Single(m => m.Id == id);
|
||||
_context.Instrument.Remove(instrument);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using Microsoft.AspNet.Mvc;
|
|||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
using System.Security.Claims;
|
||||
using Models;
|
||||
using Models.Relationship;
|
||||
public class LocationTypesController : Controller
|
||||
|
|
@ -51,7 +52,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.LocationType.Add(locationType);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(locationType);
|
||||
|
|
@ -81,7 +82,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(locationType);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(locationType);
|
||||
|
|
@ -112,7 +113,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
LocationType locationType = _context.LocationType.Single(m => m.Id == id);
|
||||
_context.LocationType.Remove(locationType);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ namespace Yavsc.Controllers
|
|||
using Models.Relationship;
|
||||
using PayPal.PayPalAPIInterfaceService;
|
||||
using PayPal.PayPalAPIInterfaceService.Model;
|
||||
using PayPal.PayPalAPIInterfaceService.Model;
|
||||
|
||||
[Authorize, ServiceFilter(typeof(LanguageActionFilter))]
|
||||
public class ManageController : Controller
|
||||
|
|
@ -295,7 +294,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
var user = _dbContext.Users.FirstOrDefault(u => u.Id == User.GetUserId());
|
||||
user.DedicatedGoogleCalendar = model.GoogleCalendarId;
|
||||
await _dbContext.SaveChangesAsync();
|
||||
await _dbContext.SaveChangesAsync(User.GetUserId());
|
||||
if (string.IsNullOrEmpty(model.ReturnUrl))
|
||||
return RedirectToAction("Index");
|
||||
else return Redirect(model.ReturnUrl);
|
||||
|
|
@ -570,7 +569,7 @@ namespace Yavsc.Controllers
|
|||
_dbContext.Update(model);
|
||||
}
|
||||
else _dbContext.Performers.Add(model);
|
||||
_dbContext.SaveChanges();
|
||||
_dbContext.SaveChanges(User.GetUserId());
|
||||
// Give this user the Performer role
|
||||
if (!User.IsInRole("Performer"))
|
||||
await _userManager.AddToRoleAsync(user, "Performer");
|
||||
|
|
@ -597,7 +596,7 @@ namespace Yavsc.Controllers
|
|||
_dbContext.Performers.Remove(
|
||||
_dbContext.Performers.First(x => x.PerformerId == uid)
|
||||
);
|
||||
_dbContext.SaveChanges();
|
||||
_dbContext.SaveChanges(User.GetUserId());
|
||||
await _userManager.RemoveFromRoleAsync(user, "Performer");
|
||||
}
|
||||
var message = ManageMessageId.UnsetActivitySuccess;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using Microsoft.AspNet.Mvc;
|
|||
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
using System.Security.Claims;
|
||||
using Models;
|
||||
using Models.Musical;
|
||||
public class MusicalTendenciesController : Controller
|
||||
|
|
@ -51,7 +52,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.MusicalTendency.Add(musicalTendency);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(musicalTendency);
|
||||
|
|
@ -81,7 +82,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(musicalTendency);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(musicalTendency);
|
||||
|
|
@ -112,7 +113,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
MusicalTendency musicalTendency = _context.MusicalTendency.Single(m => m.Id == id);
|
||||
_context.MusicalTendency.Remove(musicalTendency);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
using Microsoft.Data.Entity;
|
||||
using Yavsc.Models;
|
||||
using Yavsc.Models.Messaging;
|
||||
|
|
@ -54,7 +53,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Notification.Add(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(notification);
|
||||
|
|
@ -84,7 +83,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(notification);
|
||||
|
|
@ -115,7 +114,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
Notification notification = await _context.Notification.SingleAsync(m => m.Id == id);
|
||||
_context.Notification.Remove(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
await _context.SaveChangesAsync(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.AspNet.Authorization;
|
||||
using Microsoft.AspNet.Mvc;
|
||||
using Yavsc.Models;
|
||||
|
|
@ -53,7 +54,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.ExceptionsSIREN.Add(exceptionSIREN);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(exceptionSIREN);
|
||||
|
|
@ -83,7 +84,7 @@ namespace Yavsc.Controllers
|
|||
if (ModelState.IsValid)
|
||||
{
|
||||
_context.Update(exceptionSIREN);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
return View(exceptionSIREN);
|
||||
|
|
@ -114,7 +115,7 @@ namespace Yavsc.Controllers
|
|||
{
|
||||
ExceptionSIREN exceptionSIREN = _context.ExceptionsSIREN.Single(m => m.SIREN == id);
|
||||
_context.ExceptionsSIREN.Remove(exceptionSIREN);
|
||||
_context.SaveChanges();
|
||||
_context.SaveChanges(User.GetUserId());
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ namespace Yavsc.Helpers
|
|||
using Models.Google.Messaging;
|
||||
using Models.Messaging;
|
||||
using Models;
|
||||
using Interfaces.Workflow;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Google helpers.
|
||||
|
|
@ -73,6 +75,16 @@ namespace Yavsc.Helpers
|
|||
(this GoogleAuthSettings googleSettings, IEnumerable<string> regids, Event ev)
|
||||
where Event : IEvent
|
||||
{
|
||||
if (ev == null)
|
||||
throw new Exception("Spécifier un évènement");
|
||||
if (ev.Message == null)
|
||||
throw new Exception("Spécifier un message");
|
||||
if (ev.Sender == null)
|
||||
throw new Exception("Spécifier un expéditeur");
|
||||
|
||||
if (regids == null)
|
||||
throw new NotImplementedException("Notify & No GCM reg ids");
|
||||
|
||||
var msg = new MessageWithPayload<Event>()
|
||||
{
|
||||
notification = new Notification()
|
||||
|
|
@ -84,12 +96,14 @@ namespace Yavsc.Helpers
|
|||
data = ev,
|
||||
registration_ids = regids.ToArray()
|
||||
};
|
||||
|
||||
if (regids == null)
|
||||
throw new NotImplementedException("Notify & No GCM reg ids");
|
||||
try {
|
||||
using (var m = new SimpleJsonPostMethod("https://gcm-http.googleapis.com/gcm/send",$"key={googleSettings.ApiKey}")) {
|
||||
return m.Invoke<MessageWithPayloadResponse>(msg);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
throw new Exception ("Quelque chose s'est mal passé à l'envoi",ex);
|
||||
}
|
||||
}
|
||||
public static async Task<UserCredential> GetCredentialForGoogleApiAsync(this UserManager<ApplicationUser> userManager, ApplicationDbContext context, string uid)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ namespace Yavsc
|
|||
if (Context.User != null)
|
||||
{
|
||||
isAuth = Context.User.Identity.IsAuthenticated;
|
||||
userName = Context.User.Identity.Name;
|
||||
var group = isAuth ?
|
||||
"authenticated" : "anonymous";
|
||||
// Log ("Cx: " + group);
|
||||
|
|
@ -55,9 +54,8 @@ namespace Yavsc
|
|||
UserAgent = Context.Request.Headers["User-Agent"],
|
||||
Connected = true
|
||||
});
|
||||
db.SaveChanges();
|
||||
db.SaveChanges(user.Id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else Groups.Add(Context.ConnectionId, "anonymous");
|
||||
|
|
@ -78,16 +76,16 @@ namespace Yavsc
|
|||
var cx = db.Connections.SingleOrDefault(c => c.ConnectionId == Context.ConnectionId);
|
||||
if (cx != null)
|
||||
{
|
||||
var user = db.Users.Single(u => u.UserName == userName);
|
||||
if (stopCalled)
|
||||
{
|
||||
var user = db.Users.Single(u => u.UserName == userName);
|
||||
user.Connections.Remove(cx);
|
||||
}
|
||||
else
|
||||
{
|
||||
cx.Connected = false;
|
||||
}
|
||||
db.SaveChanges();
|
||||
db.SaveChanges(user.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -110,7 +108,7 @@ namespace Yavsc
|
|||
if (cx != null)
|
||||
{
|
||||
cx.Connected = true;
|
||||
db.SaveChanges();
|
||||
db.SaveChanges(user.Id);
|
||||
}
|
||||
else cx = new Connection { ConnectionId = Context.ConnectionId,
|
||||
UserAgent = Context.Request.Headers["User-Agent"],
|
||||
|
|
@ -147,10 +145,9 @@ namespace Yavsc
|
|||
var cx = db.Connections.SingleOrDefault(c=>c.ConnectionId == Context.ConnectionId);
|
||||
if (cx!=null) {
|
||||
db.Connections.Remove(cx);
|
||||
db.SaveChanges();
|
||||
db.SaveChanges(cx.ApplicationUserId);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,22 @@
|
|||
|
||||
namespace Yavsc.Interfaces.Workflow {
|
||||
public interface IEvent {
|
||||
/// <summary>
|
||||
/// <c>/topic/(bookquery|estimate)</c>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
string Topic { get; set ; }
|
||||
/// <summary>
|
||||
/// Should be the user's name
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
string Sender { get; set ; }
|
||||
/// <summary>
|
||||
/// The message
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
string Message { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public interface IEvent {
|
||||
/// <summary>
|
||||
/// <c>/topic/(bookquery|estimate)</c>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
string Topic { get; set ; }
|
||||
/// <summary>
|
||||
/// Should be the user's name
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
string Sender { get; set ; }
|
||||
/// <summary>
|
||||
/// The message
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
string Message { get; set; }
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
using System;
|
||||
using Microsoft.Data.Entity;
|
||||
using Microsoft.Data.Entity.Infrastructure;
|
||||
using Microsoft.Data.Entity.Metadata;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
using Yavsc.Models;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
using Yavsc.Interfaces.Workflow;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
using System;
|
||||
using Microsoft.Data.Entity;
|
||||
using Microsoft.Data.Entity.Infrastructure;
|
||||
using Microsoft.Data.Entity.Metadata;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
using Yavsc.Models;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
|
||||
namespace Yavsc.Migrations
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
using System;
|
||||
using Microsoft.Data.Entity;
|
||||
using Microsoft.Data.Entity.Infrastructure;
|
||||
using Microsoft.Data.Entity.Metadata;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
using Yavsc.Models;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
|
||||
namespace Yavsc.Migrations
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
using System;
|
||||
using Microsoft.Data.Entity;
|
||||
using Microsoft.Data.Entity.Infrastructure;
|
||||
using Microsoft.Data.Entity.Metadata;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
using Yavsc.Models;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
|
||||
namespace Yavsc.Migrations
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
using System;
|
||||
using Microsoft.Data.Entity;
|
||||
using Microsoft.Data.Entity.Infrastructure;
|
||||
using Microsoft.Data.Entity.Metadata;
|
||||
using Microsoft.Data.Entity.Migrations;
|
||||
using Yavsc.Models;
|
||||
|
||||
namespace Yavsc.Migrations
|
||||
|
|
|
|||
|
|
@ -5,10 +5,8 @@ using System.Threading.Tasks;
|
|||
using Microsoft.AspNet.Authentication.OAuth;
|
||||
using Microsoft.AspNet.Identity.EntityFramework;
|
||||
using Microsoft.Data.Entity;
|
||||
using System.Web;
|
||||
using System.Threading;
|
||||
using Yavsc.Models.Haircut;
|
||||
using Yavsc.Models.Messaging;
|
||||
|
||||
namespace Yavsc.Models
|
||||
{
|
||||
|
|
@ -28,6 +26,7 @@ namespace Yavsc.Models
|
|||
using Musical.Profiles;
|
||||
using Workflow.Profiles;
|
||||
using Drawing;
|
||||
|
||||
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
|
||||
{
|
||||
protected override void OnModelCreating(ModelBuilder builder)
|
||||
|
|
@ -123,7 +122,7 @@ namespace Yavsc.Models
|
|||
public Task ClearTokensAsync()
|
||||
{
|
||||
Tokens.RemoveRange(this.Tokens);
|
||||
SaveChanges();
|
||||
SaveChanges(null);
|
||||
return Task.FromResult(0);
|
||||
}
|
||||
|
||||
|
|
@ -138,7 +137,7 @@ namespace Yavsc.Models
|
|||
if (item != null)
|
||||
{
|
||||
Tokens.Remove(item);
|
||||
SaveChanges();
|
||||
SaveChanges(email);
|
||||
}
|
||||
return Task.FromResult(0);
|
||||
}
|
||||
|
|
@ -184,7 +183,7 @@ namespace Yavsc.Models
|
|||
item.RefreshToken = value.RefreshToken;
|
||||
Tokens.Update(item);
|
||||
}
|
||||
SaveChanges();
|
||||
SaveChanges(googleUserId);
|
||||
return Task.FromResult(0);
|
||||
}
|
||||
|
||||
|
|
@ -225,13 +224,11 @@ namespace Yavsc.Models
|
|||
public DbSet<GeneralSettings> GeneralSettings { get; set; }
|
||||
public DbSet<CoWorking> WorkflowProviders { get; set; }
|
||||
|
||||
private void AddTimestamps()
|
||||
private void AddTimestamps(string currentUsername)
|
||||
{
|
||||
var entities = ChangeTracker.Entries().Where(x => x.Entity.GetType().GetInterface("IBaseTrackedEntity")!=null && (x.State == EntityState.Added || x.State == EntityState.Modified));
|
||||
|
||||
var currentUsername = !string.IsNullOrEmpty(System.Web.HttpContext.Current?.User?.Identity?.Name)
|
||||
? HttpContext.Current.User.Identity.Name
|
||||
: "Anonymous";
|
||||
// Microsoft.AspNet.Identity;
|
||||
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
|
|
@ -245,15 +242,13 @@ namespace Yavsc.Models
|
|||
((IBaseTrackedEntity)entity.Entity).UserModified = currentUsername;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override public int SaveChanges() {
|
||||
AddTimestamps();
|
||||
public int SaveChanges(string userId) {
|
||||
AddTimestamps(userId);
|
||||
return base.SaveChanges();
|
||||
}
|
||||
|
||||
public override async Task<int> SaveChangesAsync(CancellationToken ctoken = default(CancellationToken)) {
|
||||
AddTimestamps();
|
||||
|
||||
public async Task<int> SaveChangesAsync(string userId, CancellationToken ctoken = default(CancellationToken)) {
|
||||
AddTimestamps(userId);
|
||||
return await base.SaveChangesAsync();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ namespace Yavsc.Models.Billing
|
|||
public string Description { get; set; }
|
||||
public BaseProduct Article { get; set; }
|
||||
public int Count { get; set; }
|
||||
|
||||
[DisplayFormat(DataFormatString="{0:C}")]
|
||||
public decimal UnitaryCost { get; set; }
|
||||
|
||||
public long EstimateId { get; set; }
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ namespace Yavsc.Models.Billing
|
|||
{
|
||||
using Interfaces;
|
||||
using Models.Workflow;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
public partial class Estimate : IEstimate
|
||||
{
|
||||
|
|
@ -22,7 +23,7 @@ namespace Yavsc.Models.Billing
|
|||
/// it will result in a new estimate template
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[ForeignKey("CommandId")]
|
||||
[ForeignKey("CommandId"),JsonIgnore]
|
||||
public BookQuery Query { get; set; }
|
||||
public string Description { get; set; }
|
||||
public string Title { get; set; }
|
||||
|
|
@ -62,12 +63,12 @@ namespace Yavsc.Models.Billing
|
|||
[Required]
|
||||
public string OwnerId { get; set; }
|
||||
|
||||
[ForeignKey("OwnerId")]
|
||||
[ForeignKey("OwnerId"),JsonIgnore]
|
||||
public virtual PerformerProfile Owner { get; set; }
|
||||
|
||||
[Required]
|
||||
public string ClientId { get; set; }
|
||||
[ForeignKey("ClientId")]
|
||||
[ForeignKey("ClientId"),JsonIgnore]
|
||||
public virtual ApplicationUser Client { get; set; }
|
||||
|
||||
public string CommandType
|
||||
|
|
|
|||
|
|
@ -2,13 +2,12 @@
|
|||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Yavsc.Interfaces.Workflow;
|
||||
using Yavsc.Models.Market;
|
||||
using Yavsc.Models.Workflow;
|
||||
using YavscLib;
|
||||
|
||||
namespace Yavsc.Models.Billing
|
||||
{
|
||||
using Interfaces.Workflow;
|
||||
using Workflow;
|
||||
using YavscLib;
|
||||
|
||||
public abstract class NominativeServiceCommand : IBaseTrackedEntity, IQuery
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Yavsc.Models.Billing;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
using Yavsc.Interfaces.Workflow;
|
||||
|
||||
namespace Yavsc.Models.Haircut
|
||||
{
|
||||
public class HairCutQueryEvent : BookQueryProviderInfo, IEvent
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
using Yavsc.Models.Market;
|
||||
|
||||
namespace Yavsc.Models.Haircut
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ namespace Yavsc.Models
|
|||
using Models.Chat;
|
||||
using Models.Bank;
|
||||
using Models.Access;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
public class ApplicationUser : IdentityUser
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -40,24 +42,24 @@ namespace Yavsc.Models
|
|||
/// User's posts
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[InverseProperty("Author")]
|
||||
[InverseProperty("Author"),JsonIgnore]
|
||||
public virtual List<Blog> Posts { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User's contact list
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[InverseProperty("Owner")]
|
||||
[InverseProperty("Owner"),JsonIgnore]
|
||||
public virtual List<Contact> Book { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// External devices using the API
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[InverseProperty("DeviceOwner")]
|
||||
[InverseProperty("DeviceOwner"),JsonIgnore]
|
||||
public virtual List<GoogleCloudMobileDeclaration> Devices { get; set; }
|
||||
|
||||
[InverseProperty("Owner")]
|
||||
[InverseProperty("Owner"),JsonIgnore]
|
||||
public virtual List<Connection> Connections { get; set; }
|
||||
|
||||
|
||||
|
|
@ -65,7 +67,7 @@ namespace Yavsc.Models
|
|||
/// User's circles
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[InverseProperty("Owner")]
|
||||
[InverseProperty("Owner"),JsonIgnore]
|
||||
|
||||
public virtual List<Circle> Circles { get; set; }
|
||||
|
||||
|
|
@ -90,6 +92,7 @@ namespace Yavsc.Models
|
|||
public long DiskQuota { get; set; } = 512*1024*1024;
|
||||
public long DiskUsage { get; set; } = 0;
|
||||
|
||||
[JsonIgnore]
|
||||
public virtual List<BlackListed> BlackList { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,11 +23,13 @@ using System.ComponentModel.DataAnnotations;
|
|||
|
||||
namespace Yavsc.Models.Messaging
|
||||
{
|
||||
using Interfaces;
|
||||
/// <summary>
|
||||
/// Base event.
|
||||
/// </summary>
|
||||
|
||||
using Interfaces;
|
||||
using Interfaces.Workflow;
|
||||
|
||||
/// <summary>
|
||||
/// Base event.
|
||||
/// </summary>
|
||||
|
||||
public class BaseEvent : IEvent {
|
||||
public BaseEvent()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,3 @@
|
|||
|
||||
namespace Yavsc.Models.Messaging
|
||||
{
|
||||
|
||||
//
|
||||
// BookQueryEvent.cs
|
||||
//
|
||||
|
|
@ -23,6 +19,12 @@ namespace Yavsc.Models.Messaging
|
|||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
namespace Yavsc.Models.Messaging
|
||||
{
|
||||
using Interfaces.Workflow;
|
||||
|
||||
|
||||
|
||||
public class BookQueryEvent: BookQueryProviderInfo, IEvent
|
||||
{
|
||||
public BookQueryEvent()
|
||||
|
|
|
|||
|
|
@ -1,16 +1,22 @@
|
|||
using System.Linq;
|
||||
using Microsoft.Data.Entity;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using Yavsc.Helpers;
|
||||
using Yavsc.Models.Billing;
|
||||
|
||||
namespace Yavsc.Models.Messaging
|
||||
{
|
||||
using Interfaces.Workflow;
|
||||
using Billing;
|
||||
using Yavsc.Helpers;
|
||||
|
||||
public class EstimationEvent: IEvent
|
||||
{
|
||||
public EstimationEvent(ApplicationDbContext context, Estimate estimate, IStringLocalizer SR)
|
||||
{
|
||||
Topic = "Estimation";
|
||||
Estimation = estimate;
|
||||
var perfer = context.Performers.FirstOrDefault(
|
||||
var perfer = context.Performers.Include(
|
||||
p=>p.Performer
|
||||
).FirstOrDefault(
|
||||
p => p.PerformerId == estimate.OwnerId
|
||||
);
|
||||
// Use estimate.OwnerId;
|
||||
|
|
@ -27,28 +33,19 @@ namespace Yavsc.Models.Messaging
|
|||
ProviderClientInfo ProviderInfo { get; set; }
|
||||
Estimate Estimation { get; set; }
|
||||
|
||||
private string subtopic = null;
|
||||
string IEvent.Topic
|
||||
{
|
||||
get
|
||||
{
|
||||
return "/topic/estimate"+subtopic!=null?"/"+subtopic:"";
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
subtopic = value;
|
||||
}
|
||||
}
|
||||
|
||||
string IEvent.Sender
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
string IEvent.Message
|
||||
public string Topic
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public string Sender
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
|
||||
public string Message
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,7 +5,6 @@ using Newtonsoft.Json;
|
|||
|
||||
namespace Yavsc.Models.Workflow
|
||||
{
|
||||
using YavscLib;
|
||||
using Yavsc.Models.Billing;
|
||||
using Yavsc.Models.Relationship;
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -5,8 +5,9 @@ using System.ComponentModel.DataAnnotations.Schema;
|
|||
namespace Yavsc.Models.Workflow
|
||||
{
|
||||
using Models.Relationship;
|
||||
|
||||
public class PerformerProfile {
|
||||
using YavscLib.Workflow;
|
||||
|
||||
public class PerformerProfile : IPerformerProfile {
|
||||
|
||||
[Key]
|
||||
public string PerformerId { get; set; }
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
using System;
|
||||
|
||||
namespace Yavsc.Models.Workflow
|
||||
{
|
||||
using Interfaces.Workflow;
|
||||
using Models.Market;
|
||||
using YavscLib;
|
||||
|
||||
using Interfaces.Workflow;
|
||||
using YavscLib;
|
||||
|
||||
public interface IQuery: IBaseTrackedEntity
|
||||
{
|
||||
QueryStatus Status { get; set; }
|
||||
|
|
|
|||
|
|
@ -212,14 +212,13 @@
|
|||
<data name="EstimateToProduce"><value>Demandes de Devis en souffrance</value></data>
|
||||
<data name="EstimateToSignAsPro"><value>Devis à valider</value></data>
|
||||
<data name="EstimateToSignAsCli"><value>Devis à accèpter ou refuser</value></data>
|
||||
<data name="EstimationMessageToClient"><value>{0} à validé et évalué votre demande, avec un devis à {1:C}</value></data>
|
||||
|
||||
<data name="EventDate"><value>Date de l'évennement</value></data>
|
||||
|
||||
<data name="BillToSignAsPro"><value>Factures à produire</value></data>
|
||||
<data name="BillToSignAsCli"><value>Factures à honnorer</value></data>
|
||||
<data name="PayementsDone"><value>Paiements effectués</value></data>
|
||||
|
||||
<data name="EstimationMessageToClient"><value>{0} a validé un devis pour vous : {1}\nAu total : {2} €
|
||||
Il attend maintenant votre signature.</value></data>
|
||||
<data name="EstimateWanted"><value>Demande de devis</value></data>
|
||||
<data name="Event date"><value>Date de l'évennement</value></data>
|
||||
<data name="EventWebPage"><value>Page web de l'événement</value></data>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ namespace Yavsc
|
|||
{
|
||||
public string Title { get; set; }
|
||||
public string Slogan { get; set; }
|
||||
|
||||
public string Banner { get; set; }
|
||||
/// <summary>
|
||||
/// Conceptually,
|
||||
/// This authorisation server only has this present site as unique audience.
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ using Microsoft.AspNet.Localization;
|
|||
using Microsoft.AspNet.Mvc;
|
||||
using Microsoft.AspNet.Mvc.Filters;
|
||||
using Microsoft.AspNet.Mvc.Razor;
|
||||
using Microsoft.AspNet.Http.Extensions;
|
||||
using Microsoft.Data.Entity;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
|
@ -232,6 +231,7 @@ namespace Yavsc
|
|||
IOptions<RequestLocalizationOptions> localizationOptions,
|
||||
IOptions<OAuth2AppSettings> oauth2SettingsContainer,
|
||||
RoleManager<IdentityRole> roleManager,
|
||||
UserManager<ApplicationUser> userManager,
|
||||
IAuthorizationService authorizationService,
|
||||
ILoggerFactory loggerFactory)
|
||||
{
|
||||
|
|
@ -320,7 +320,7 @@ namespace Yavsc
|
|||
{
|
||||
foreach (var c in db.Connections)
|
||||
db.Connections.Remove(c);
|
||||
db.SaveChanges();
|
||||
db.SaveChanges("Startup");
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -339,13 +339,13 @@ namespace Yavsc
|
|||
ConfigureWorkflow(app, SiteSetup);
|
||||
app.UseRequestLocalization(localizationOptions.Value, (RequestCulture) new RequestCulture((string)"fr"));
|
||||
app.UseSession();
|
||||
|
||||
app.UseMvc(routes =>
|
||||
{
|
||||
routes.MapRoute(
|
||||
name: "default",
|
||||
template: "{controller=Home}/{action=Index}/{id?}");
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// Entry point for the application.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
<div>
|
||||
<h4>Estimate</h4>
|
||||
<hr />
|
||||
|
||||
@Html.DisplayFor(model => model)
|
||||
<p>
|
||||
<a asp-action="Edit" asp-route-id="@Model.Id">@SR["Edit"]</a> |
|
||||
|
|
|
|||
|
|
@ -12,10 +12,10 @@
|
|||
<table class="table">
|
||||
<tr>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.Description)
|
||||
@Html.DisplayNameFor(model => model.Title)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.Title)
|
||||
@Html.DisplayNameFor(model => model.Description)
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.Query.Client)
|
||||
|
|
@ -23,6 +23,9 @@
|
|||
<th>
|
||||
@SR["Performer"]
|
||||
</th>
|
||||
<th>
|
||||
@Html.DisplayNameFor(model => model.ProviderValidationDate)
|
||||
</th>
|
||||
<th>
|
||||
@SR["Id"]
|
||||
</th>
|
||||
|
|
@ -32,10 +35,10 @@
|
|||
@foreach (var item in Model) {
|
||||
<tr>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.Description)
|
||||
@Html.DisplayFor(modelItem => item.Title)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.Title)
|
||||
@Html.DisplayFor(modelItem => item.Description)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.Query.Client.UserName)
|
||||
|
|
@ -43,6 +46,9 @@
|
|||
<td>
|
||||
@Html.DisplayFor(modelItem => item.Query.PerformerProfile.Performer.UserName)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.ProviderValidationDate)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.Id)
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
<div class="carousel-caption-s" >
|
||||
|
||||
@if (act.Children.Count>0) {
|
||||
<p><em><a asp-route-id="@act.Code">@act.Name</a></em><br/>
|
||||
<p><em>@act.Name</em><br/>
|
||||
@act.Description </p>
|
||||
<a asp-route-id="@act.Code">
|
||||
@foreach (Activity c in act.Children) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
@model Estimate
|
||||
|
||||
<dl class="dl-horizontal">
|
||||
<dt>
|
||||
@Html.DisplayNameFor(model => model.Title)
|
||||
|
|
@ -23,5 +24,8 @@
|
|||
}
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<label>Signature fournisseur :
|
||||
<img src="/api/pdfestimate/prosign/@Model.Id" alt="" style="height:100px; background-color: white;">
|
||||
</label>
|
||||
|
||||
@await Component.InvokeAsync("Estimate",Model.Id)
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no" />
|
||||
<link rel="icon" href="/favicon.ico?v2" />
|
||||
<title>@ViewData["Title"] - @SiteSettings.Value.Title</title>
|
||||
|
||||
<environment names="Development">
|
||||
<link rel="stylesheet" href="~/css/bootstrap.css" />
|
||||
<link rel="stylesheet" href="~/css/site.css" />
|
||||
|
|
@ -32,13 +33,18 @@
|
|||
<script src="~/js/site.js"></script>
|
||||
</environment>
|
||||
<script src="~/js/jquery.signalR-2.2.1.js"></script>
|
||||
<style>
|
||||
nav {
|
||||
background: url(@Startup.SiteSetup.Banner) 0% 50%;
|
||||
}
|
||||
</style>
|
||||
@RenderSection("header", required: false)
|
||||
</head>
|
||||
<body>
|
||||
@if (ViewData ["Notify"] != null) {
|
||||
foreach (Notification n in ViewData ["Notify"] as IEnumerable<Notification>) {
|
||||
<div class="alert alert-info alert-dismissable">
|
||||
<em><strong>@n.title</strong></em><br>
|
||||
<h1>@n.title</h1><em></em>
|
||||
@n.body
|
||||
<a class="close" data-dismiss="alert" aria-label="close" onclick="notifClick(@n.Id)">@((n.click_action==null)?SR["Fermer"]:SR[n.click_action])</a>
|
||||
</div>
|
||||
|
|
@ -75,12 +81,7 @@
|
|||
<environment names="Development">
|
||||
<p><em>Site de développement</em></p>
|
||||
</environment>
|
||||
<environment names="Lua">
|
||||
<i>Get up.</i>
|
||||
</environment>
|
||||
<environment names="ZicMoove">
|
||||
<i>Get up.</i>
|
||||
</environment>
|
||||
<i>@SiteSettings.Value.Slogan</i>
|
||||
|
||||
<script>
|
||||
window.fbAsyncInit = function() {
|
||||
|
|
|
|||
|
|
@ -14,7 +14,8 @@
|
|||
},
|
||||
"Site": {
|
||||
"Title": "Yavsc",
|
||||
"Slogan":"Yavsc!",
|
||||
"Slogan": "Yavsc!",
|
||||
"Banner": "/images/banner.jpg",
|
||||
"Authority": "http://127.0.0.1:5000/",
|
||||
"Audience": "http://127.0.0.1:5000/",
|
||||
"Owner": {
|
||||
|
|
|
|||
|
|
@ -155,10 +155,6 @@ footer {
|
|||
background-color: rgba(200,256,200,.4);
|
||||
}
|
||||
|
||||
nav {
|
||||
background: url('/images/arts/musique-3.jpg') 0% 50%;
|
||||
}
|
||||
|
||||
footer {
|
||||
color:rgb(128,128,128);
|
||||
font-weight: bolder;
|
||||
|
|
|
|||
2
Yavsc/wwwroot/css/site.min.css
vendored
2
Yavsc/wwwroot/css/site.min.css
vendored
File diff suppressed because one or more lines are too long
BIN
Yavsc/wwwroot/images/it/floss-license-dark.png
Normal file
BIN
Yavsc/wwwroot/images/it/floss-license-dark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 108 KiB |
17
YavscLib/Workflow/IPerformerProfile.cs
Normal file
17
YavscLib/Workflow/IPerformerProfile.cs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
namespace YavscLib.Workflow
|
||||
{
|
||||
public interface IPerformerProfile
|
||||
{
|
||||
string PerformerId { get; set; }
|
||||
string SIREN { get; set; }
|
||||
bool AcceptNotifications { get; set; }
|
||||
long OrganizationAddressId { get; set; }
|
||||
bool AcceptPublicContact { get; set; }
|
||||
bool UseGeoLocalizationToReduceDistanceWithClients { get; set; }
|
||||
string WebSite { get; set; }
|
||||
bool Active { get; set; }
|
||||
int? MaxDailyCost { get; set; }
|
||||
int? MinDailyCost { get; set; }
|
||||
int Rate { get; set; }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue