changement de candidat à l'investissement

This commit is contained in:
Paul Schneider 2017-01-26 11:04:03 +01:00
commit be3087fff6
351 changed files with 359 additions and 497 deletions

View file

@ -0,0 +1,97 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using BookAStar.Droid.Interfaces;
using Newtonsoft.Json;
using BookAStar.Model.Social;
using BookAStar.Data;
using BookAStar.Model;
namespace BookAStar.Droid.Services.GCMHandlers
{
class BookQueryGCMHandler : GCMessageHandler
{
public BookQueryGCMHandler(Context context,
NotificationManager manager,
Notification.Builder builder) : base(context,manager,builder)
{
}
/// <summary>
/// Prend en charge le message push
/// contenant une nouvelle demande de rendez-vous
/// </summary>
/// <param name="from"></param>
/// <param name="data"></param>
public override void Handle(string from, Bundle data)
{
var locationJson = data.GetString("Location");
var location = JsonConvert.DeserializeObject<Location>(locationJson);
var cid = long.Parse(data.GetString("Id"));
var clientJson = data.GetString("Client");
var client = JsonConvert.DeserializeObject<ClientProviderInfo>(clientJson);
var bq = new BookQuery
{
Id = cid,
Location = location,
Client = client,
Reason = data.GetString("Reason")
};
var dateString = data.GetString("EventDate");
DateTime evDate;
if (DateTime.TryParse(dateString, out evDate))
{
bq.EventDate = evDate;
}
SendBookQueryNotification(bq);
}
/// <summary>
/// Notifie la demande
/// </summary>
/// <param name="bquery"></param>
void SendBookQueryNotification(BookQuery bquery)
{
DataManager.Instance.BookQueries.Merge(bquery);
var bookquerynotifications = DataManager.Instance.BookQueries.Where(
q => !q.Read && q.EventDate > DateTime.Now
).ToArray();
var count = bookquerynotifications.Length;
var multiple = count > 1;
var title =
multiple ? $"{count} demandes" : bquery.Client.UserName;
var message = $"{bquery.EventDate} {bquery.Client.UserName} {bquery.Location.Address}\n {bquery.Reason}";
var intent = new Intent(context, typeof(MainActivity));
intent.AddFlags(ActivityFlags.ClearTop);
intent.PutExtra("BookQueryId", bquery.Id);
var pendingIntent = PendingIntent.GetActivity(context, 0, intent, PendingIntentFlags.OneShot);
Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
int maxil = 5;
for (int cn = 0; cn < count && cn < maxil; cn++)
{
inboxStyle.AddLine(bookquerynotifications[cn].Client.UserName);
}
if (count > maxil)
inboxStyle.SetSummaryText($"Plus {count - maxil} autres");
else inboxStyle.SetSummaryText((string)null);
notificationBuilder.SetContentTitle(title).SetContentText(message)
.SetStyle(inboxStyle)
.SetContentIntent(pendingIntent);
var notification = notificationBuilder.Build();
notificationManager.Notify(bookQueryNotificationId, notification);
}
int bookQueryNotificationId = 1;
}
}

View file

@ -0,0 +1,117 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Newtonsoft.Json;
using BookAStar.Model.Social;
using BookAStar.Model;
using BookAStar.Model.Workflow;
using BookAStar.Data;
namespace BookAStar.Droid.Services.GCMHandlers
{
class EstimateGCMHandler: GCMessageHandler
{
public EstimateGCMHandler(Context context,
NotificationManager manager,
Notification.Builder builder) :
base(context,manager,builder)
{
}
public override void Handle(string from, Bundle data)
{
var locationJson = data.GetString("Location");
var location = JsonConvert.DeserializeObject<Location>(locationJson);
var eid = long.Parse(data.GetString("Id"));
var clientJson = data.GetString("Client");
var client = JsonConvert.DeserializeObject<ClientProviderInfo>(clientJson);
var estimate = new Estimate
{
Id = eid
};
var dateString = data.GetString("ProviderValidationDate");
DateTime evDate;
if (DateTime.TryParse(dateString, out evDate))
{
estimate.ProviderValidationDate = evDate;
}
Notify(estimate);
}
void Notify (Estimate estimate)
{
// do merge the data, even when no user is active
DataManager.Instance.Estimates.Merge(estimate);
if (MainSettings.CurrentUser == null) return;
var estimatenotifications = DataManager.Instance.Estimates.Where(
e => e.ClientApprouvalDate == default(DateTime) &&
e.ClientId == MainSettings.CurrentUser.Id
).OrderByDescending(e=>e.ProviderValidationDate).ToArray();
var count = estimatenotifications.Length;
var multiple = count > 1;
string title;
string message;
if (multiple)
{
StringBuilder tb = new StringBuilder();
int nc = 0;
foreach (var pro in estimatenotifications.Select(
e=>e.Owner
).Distinct())
{
nc++;
tb.Append($"{pro.UserName}");
if (nc > 3)
{
tb.Append(" et {count-nc} autres");
break;
}
else tb.Append(", ");
}
tb.Append("attendent votre validation de leur devis");
title = tb.ToString();
message =
string.Join("\n",
estimatenotifications.Select(
n => $"{n.Title} [{n.Owner.UserName}]\n").ToArray());
}
else
{
title = $"{estimate.Owner.UserName} attend votre validation de son devis";
message = $"{estimate.Title} ({estimate.Total} euro)\n({estimate.Query.Reason})";
}
var intent = new Intent(context, typeof(MainActivity));
intent.AddFlags(ActivityFlags.ClearTop);
intent.PutExtra("EstimateId", estimate.Id);
var pendingIntent = PendingIntent.GetActivity(context, 0, intent, PendingIntentFlags.OneShot);
Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
int maxil = 5;
for (int cn = 0; cn < count && cn < maxil; cn++)
{
inboxStyle.AddLine(estimatenotifications[cn].Owner.UserName);
}
if (count > maxil)
inboxStyle.SetSummaryText($"Plus {count - maxil} autres");
else inboxStyle.SetSummaryText((string)null);
notificationBuilder.SetContentTitle(title).SetContentText(message)
.SetStyle(inboxStyle)
.SetContentIntent(pendingIntent);
var notification = notificationBuilder.Build();
notificationManager.Notify(notificationId, notification);
}
int notificationId = 2;
}
}

View file

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using BookAStar.Droid.Interfaces;
namespace BookAStar.Droid.Services.GCMHandlers
{
abstract class GCMessageHandler : IGCMessageHandler
{
protected Context context;
protected NotificationManager notificationManager;
protected Notification.Builder notificationBuilder;
public GCMessageHandler(Context context,
NotificationManager notificationManager,
Notification.Builder notificationBuilder)
{
this.context = context;
this.notificationBuilder = notificationBuilder;
this.notificationManager = notificationManager;
}
public abstract void Handle(string from, Bundle data);
}
}