@@ -228,18 +210,19 @@ public partial class CrmCompanyViewPage : IDisposable
{
Working = true;
// write contact to debug log
- Logger.LogDebug("CompanyView => SaveContactCallback <= {}", JsonSerializer.Serialize(contact));
+ var jsonContact = JsonSerializer.Serialize(contact);
+ Logger.LogDebug("CompanyView => SaveContactCallback <= {}", jsonContact);
if (string.IsNullOrWhiteSpace(contact.ContactId))
{
// new contact created
- Logger.LogDebug("create");
+ Logger.LogDebug("create => {}", jsonContact);
// send post request to backend
await ContactRepo.CreateContact(contact);
}
else
{
// contact modified
- Logger.LogDebug("update");
+ Logger.LogDebug("update => {}", jsonContact);
// send put request to backend
await ContactRepo.UpdateContact(contact);
}
@@ -326,6 +309,7 @@ public partial class CrmCompanyViewPage : IDisposable
if (!string.IsNullOrWhiteSpace(result.Name))
{
Company = result;
+ StateHasChanged();
}
Working = false;
}
diff --git a/Wonky.Client/Pages/CrmReportNewPage.razor b/Wonky.Client/Pages/CrmReportNewPage.razor
index c455a629..02f65b78 100644
--- a/Wonky.Client/Pages/CrmReportNewPage.razor
+++ b/Wonky.Client/Pages/CrmReportNewPage.razor
@@ -26,7 +26,7 @@
@@ -71,7 +71,7 @@
}
else
{
- Report.Figures.KmMorning = UserPref.KmMorning;
+ Report.Figures.KmMorning = Prefs.KmMorning;
diff --git a/Wonky.Client/Pages/CrmReportNewPage.razor.cs b/Wonky.Client/Pages/CrmReportNewPage.razor.cs
index 7ff013d1..62f3412b 100644
--- a/Wonky.Client/Pages/CrmReportNewPage.razor.cs
+++ b/Wonky.Client/Pages/CrmReportNewPage.razor.cs
@@ -35,7 +35,7 @@ namespace Wonky.Client.Pages;
public partial class CrmReportNewPage : IDisposable
{
[Inject] public HttpInterceptorService Interceptor { get; set; }
- [Inject] public UserPrefService UserPrefService { get; set; }
+ [Inject] public UserPrefService PrefService { get; set; }
[Inject] public ICrmActivityHttpRepository CrmActivityRepo { get; set; }
[Inject] public ICrmReportHttpRepository CrmReportRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
@@ -45,7 +45,7 @@ public partial class CrmReportNewPage : IDisposable
private ReportDto Report { get; set; } = new();
private List Activities { get; set; } = new();
private ReportFiguresDto InitialValues { get; set; }
- private UserPref UserPref { get; set; } = new();
+ private UserPref Prefs { get; set; } = new();
private bool FormInvalid { get; set; } = true;
private bool NoFigures { get; set; } = true;
private bool Working { get; set; } = true;
@@ -64,23 +64,26 @@ public partial class CrmReportNewPage : IDisposable
{
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
+
ReportContext = new EditContext(Report);
ReportContext.OnFieldChanged += HandleFieldChanged;
ReportContext.OnValidationStateChanged += ValidationChanged;
- UserPref = await UserPrefService.GetPreferences();
- if (!string.IsNullOrWhiteSpace(UserPref.WorkDate))
- _workDate = DateTime.Parse(UserPref.WorkDate);
+ Prefs = await PrefService.GetPreferences();
+ if (!string.IsNullOrWhiteSpace(Prefs.WorkDate))
+ _workDate = DateTime.Parse(Prefs.WorkDate);
- if(await CrmReportRepo.ReportExist(UserPref.WorkDate))
- Navigator.NavigateTo($"/sales-reports/view/{UserPref.WorkDate}");
+ if(await CrmReportRepo.ReportExist(Prefs.WorkDate))
+ Navigator.NavigateTo($"/sales-reports/view/{Prefs.WorkDate}");
BeginLeave = _workDate;
EndLeave = _workDate;
Report.FromDateTime = $"{_workDate:yyyy-MM-dd'T'12:00:00}";
Report.ToDateTime = $"{_workDate:yyyy-MM-dd'T'12:00:00}";
-
+
+ Report.Figures.KmMorning = 0;
+ Report.Figures.KmEvening = 0;
Report.Figures.Distance = 0;
Report.Figures.DistancePrivateMonth = 0;
await GetKeyFigures();
@@ -125,10 +128,17 @@ public partial class CrmReportNewPage : IDisposable
Working = true;
var result = await CrmReportRepo.PostReport($"{_workDate:yyyy-MM-dd}", Report);
+ if (!result.IsSuccess)
+ {
+ Working = false;
+ Toaster.ShowError($"{result.Message}", $"HTTP Status {result.Code}");
+ return;
+ }
+
// reset km and date confirmation
- // await PreferenceService.SetKmMorning(0);
+ await PrefService.SetKmMorning(0);
// reset date confirmed
- await UserPrefService.SetDateConfirmed(false);
+ await PrefService.SetDateConfirmed(false);
Navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");
}
///
@@ -170,16 +180,27 @@ public partial class CrmReportNewPage : IDisposable
// format report date time input
Report.FromDateTime = checkIn.ToString("yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture);
Report.ToDateTime = checkOut.ToString("yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture);
+
// assign final distance numbers
+ if (Report.DayTypeEnum.ToLower().Contains("leave"))
+ {
+ Report.Figures.KmEvening = 0;
+ Report.Figures.KmMorning = 0;
+ }
+
+ // calculate distance
Report.Figures.Distance = Report.Figures.KmEvening - Report.Figures.KmMorning;
+ // add distance to distance month
Report.Figures.DistanceMonth += Report.Figures.Distance;
+ // add private distance to month
Report.Figures.DistancePrivateMonth += Report.Figures.DistancePrivate;
Logger.LogDebug("_workDate => {workDate}", $"{_workDate:yyyy-MM-dd}");
Logger.LogDebug("_report => {report}", JsonSerializer.Serialize(Report));
- // create a prompt
- Prompt = Report.Figures.Distance > 1000 ? $"'{Report.Figures.Distance}'KM tal er meget højt. Er du sikker på at det er rigtigt? Gem rapport for {_workDate.ToLongDateString()}?" : $"Gem Rapport for {_workDate.ToLongDateString()}?";
+
// pop confirmation
+ // create a prompt for popup confirmation
+ Prompt = Report.Figures.Distance > 1000 ? $"'{Report.Figures.Distance}'KM tal er meget højt. Er du sikker på at det er rigtigt? Gem rapport for {_workDate.ToLongDateString()}?" : $"Gem Rapport for {_workDate.ToLongDateString()}?";
ConfirmReportModal.Show();
}
@@ -234,9 +255,16 @@ public partial class CrmReportNewPage : IDisposable
Report.Figures = data.ReportData;
InitialValues = data.ReportData;
Activities = data.ReportItems;
-
- if(!Report.DayTypeEnum.ToLower().Contains("leave"))
- Report.Figures.KmMorning = UserPref.KmMorning;
+
+ if (Report.DayTypeEnum.ToLower().Contains("leave"))
+ {
+ Report.Figures.KmMorning = 0;
+ Report.Figures.KmEvening = 0;
+ }
+ else
+ {
+ Report.Figures.KmMorning = Prefs.KmMorning;
+ }
NoFigures = false;
Working = false;
diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json
index 4af67858..933ba967 100644
--- a/Wonky.Client/wwwroot/appsettings.json
+++ b/Wonky.Client/wwwroot/appsettings.json
@@ -1,7 +1,7 @@
{
"appInfo": {
"name": "Wonky Client",
- "version": "0.77.1",
+ "version": "0.79.1",
"rc": true,
"sandBox": false,
"image": "grumpy-coder.png"
@@ -14,7 +14,7 @@
"crmProductExt": "history/products",
"crmReports": "api/v2/crm/advisors/reports",
"crmActivities": "api/v2/crm/advisors/activities",
- "crmRpcSyncExt": "invoices/sync",
+ "crmRpcSyncExt": "invoices/rpc",
"crmTasks": "api/v2/crm/advisors/tasks",
"crmWorkplaceExt": "workplaces",
"officeAdvisors": "api/v2/office/users/advisors",
diff --git a/Wonky.Entity/DTO/CompanyDto.cs b/Wonky.Entity/DTO/CompanyDto.cs
index 6dc855d5..2ad40c78 100644
--- a/Wonky.Entity/DTO/CompanyDto.cs
+++ b/Wonky.Entity/DTO/CompanyDto.cs
@@ -22,60 +22,10 @@ namespace Wonky.Entity.DTO;
public class CompanyDto
{
///
- /// Name
+ /// Account number
///
- [Required(ErrorMessage = "Navn skal udfyldes")]
- [MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")]
- public string Name { get; set; } = "";
-
- ///
- /// Alert
- ///
- [MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")]
- public string Note { get; set; } = "";
- ///
- /// Crm note
- ///
- public string CrmNotes { get; set; } = "";
- ///
- /// Postal code
- ///
- [Required(ErrorMessage = "Postnummer skal udfyldes")]
- [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
- public string ZipCode { get; set; } = "";
-
- ///
- /// City name
- ///
- [Required(ErrorMessage = "Bynavn skal udfyldes")]
- [MaxLength(30, ErrorMessage = "Du kan højst bruge 30 tegn")]
- public string City { get; set; } = "";
-
- ///
- /// VAT number
- ///
- [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
- public string VatNumber { get; set; } = "";
-
- ///
- /// Company Id
- ///
- public string CompanyId { get; set; } = "";
-
- ///
- /// Sales representative entity Id
- ///
- public string SalesRepId { get; set; } = "";
-
- ///
- /// SalesRep ERP identifier
- ///
- public string SalesRep { get; set; } = "";
-
- ///
- /// Business Central entity Id
- ///
- public string BcId { get; set; } = "";
+ [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
+ public string Account { get; set; } = "";
///
/// Office address 1
@@ -90,22 +40,43 @@ public class CompanyDto
public string Address2 { get; set; } = "";
///
- /// Account number
+ /// Attention
///
- [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
- public string Account { get; set; } = "";
+ [MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")]
+ public string Attention { get; set; } = "";
///
- /// Phone number
+ /// Business Central entity Id
///
- [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
- public string Phone { get; set; } = "";
+ public string BcId { get; set; } = "";
+
+ ///
+ /// ERP block state
+ ///
+ /// Empty string - Customer not blocked
+ public string Blocked { get; set; } = "";
///
- /// Mobile phone number
+ /// City name
///
- [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
- public string Mobile { get; set; } = "";
+ [Required(ErrorMessage = "Bynavn skal udfyldes")]
+ [MaxLength(30, ErrorMessage = "Du kan højst bruge 30 tegn")]
+ public string City { get; set; } = "";
+
+ ///
+ /// Company Id
+ ///
+ public string CompanyId { get; set; } = "";
+
+ ///
+ /// Country code ISO
+ ///
+ public string CountryCode { get; set; } = "";
+
+ ///
+ /// Crm note
+ ///
+ public string CrmNotes { get; set; } = "";
///
/// Office email
@@ -114,32 +85,16 @@ public class CompanyDto
public string Email { get; set; } = "";
///
- /// Attention
+ /// Value indication if company has shutdown
///
- [MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")]
- public string Attention { get; set; } = "";
+ /// 0 or 1
+ public int HasFolded { get; set; }
///
- /// ERP block state
+ /// Date for last sync of product history
///
- /// Empty string - Customer not blocked
- public string Blocked { get; set; } = "";
-
- ///
- /// Country code ISO
- ///
- public string CountryCode { get; set; } = "";
-
- ///
- /// Last visit
- ///
- public string LastVisit { get; set; } = "2010-01-01";
-
- ///
- /// Next visit
- ///
- public string NextVisit { get; set; } = "2010-01-01";
-
+ public string HistorySync { get; set; } = "";
+
///
/// Interval between visits
///
@@ -147,37 +102,76 @@ public class CompanyDto
[Range(1, 52, ErrorMessage = "Angiv interval mellem 1 og 52 uger")]
public int Interval { get; set; } = 8;
- ///
- /// Value indication if company has shutdown
- ///
- /// 0 or 1
- public int HasFolded { get; set; }
-
///
/// User value for hiding the company is out of business
///
/// 0 or 1
public int IsHidden { get; set; }
+ ///
+ /// Last visit
+ ///
+ public string LastVisit { get; set; } = "2010-01-01";
+
+ ///
+ /// Mobile phone number
+ ///
+ [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
+ public string Mobile { get; set; } = "";
+
+ ///
+ /// Name
+ ///
+ [Required(ErrorMessage = "Navn skal udfyldes")]
+ [MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")]
+ public string Name { get; set; } = "";
+
+ ///
+ /// Next visit
+ ///
+ public string NextVisit { get; set; } = "2010-01-01";
+
+ ///
+ /// Alert
+ ///
+ [MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")]
+ public string Note { get; set; } = "";
+
+ ///
+ /// Phone number
+ ///
+ [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
+ public string Phone { get; set; } = "";
+
+ ///
+ /// SalesRep ERP identifier
+ ///
+ public string SalesRep { get; set; } = "";
+
+ ///
+ /// Sales representative entity Id
+ ///
+ public string SalesRepId { get; set; } = "";
+
///
/// Value indicating the VAT number is valid
///
/// 0 or 1
public int ValidVat { get; set; }
-
- ///
- /// Value indicating if VAT number has changed and should be written to ERP record
- ///
- /// 0 or 1
- public int UpdateErpVat { get; set; }
///
- /// Date for last sync of product history
+ /// VAT number
///
- public string HistorySync { get; set; } = "";
+ [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
+ public string VatNumber { get; set; } = "";
+
+ ///
+ /// Postal code
+ ///
+ [Required(ErrorMessage = "Postnummer skal udfyldes")]
+ [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")]
+ public string ZipCode { get; set; } = "";
- public int IsDirty { get; set; } = 0;
- public string Etag { get; set; } = "";
///
/// Virtual property indicating if timespan is within the defined interval
///
|