org number validation - work date component -
This commit is contained in:
parent
ea5c6d4c8c
commit
4591cf156a
5 changed files with 66 additions and 47 deletions
|
@ -18,6 +18,10 @@
|
|||
<td><i class="bi-file-earmark" style="font-size:1.3rem"></i></td>
|
||||
<td>Ubehandlet</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i class="bi-hand-thumbs-up" style="font-size:1.3rem"></i></td>
|
||||
<td>Accepteret</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><i class="bi-file-earmark-check" style="font-size:1.3rem"></i></td>
|
||||
<td>Plukket</td>
|
||||
|
@ -28,7 +32,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td><i class="bi-truck" style="font-size:1.3rem"></i></td>
|
||||
<td>Afhentet</td>
|
||||
<td>Leveret</td>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<div class="container-fluid">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-sm-7 fw-bold">
|
||||
@SelectedDate.DayOfWeek d. @(SelectedDate.Day)/@(SelectedDate.Month)
|
||||
d. @(SelectedDate.Day)/@(SelectedDate.Month)
|
||||
</div>
|
||||
<div class="col-sm-5">
|
||||
<InputDate class="form-control calendar" @bind-Value="SelectedDate" @oninput="OnDateChanged"/>
|
||||
|
|
|
@ -46,6 +46,19 @@ public class VatUtils
|
|||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sanitize Vat remove everything but digits
|
||||
/// </summary>
|
||||
/// <param name="vatNumber"></param>
|
||||
/// <returns></returns>
|
||||
private static string SanitizeVatNumber(string vatNumber)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(vatNumber))
|
||||
return "";
|
||||
var regexObj = new Regex(@"[^\d]");
|
||||
return regexObj.Replace(vatNumber, "");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate string is only numbers
|
||||
/// </summary>
|
||||
|
@ -100,14 +113,6 @@ public class VatUtils
|
|||
/// <returns></returns>
|
||||
private static bool ValidateFormatSe(string vatNumber)
|
||||
{
|
||||
// https://wiki.scn.sap.com/wiki/display/CRM/Sweden
|
||||
// 12 digits 0 to 9
|
||||
// C10 = (10 – (18 + 5 + 1 + 8 + 4)MOD10 10) MOD10
|
||||
// R = S1 + S3 + S5 + S7 + S9
|
||||
// Si = int(Ci/5) + (Ci*2)MOD10)
|
||||
// https://www.skatteverket.se/skatter/mervardesskattmoms/momsregistreringsnummer.4.18e1b10334ebe8bc80002649.html
|
||||
// C11 C12 == 01 (De två sista siffrorna är alltid 01)
|
||||
|
||||
var vatToCheck = vatNumber;
|
||||
if (long.Parse(vatToCheck) == 0)
|
||||
return false;
|
||||
|
@ -119,21 +124,40 @@ public class VatUtils
|
|||
return ValidateFormatSeExt(vatToCheck);
|
||||
case < 10:
|
||||
return false;
|
||||
case > 10:
|
||||
vatNumber = vatNumber[..10];
|
||||
break;
|
||||
}
|
||||
|
||||
// check digit calculation
|
||||
var r = new[] { 0, 2, 4, 6, 8 }
|
||||
.Sum(m => (int)char.GetNumericValue(vatToCheck[m]) / 5 +
|
||||
(int)char.GetNumericValue(vatToCheck[m]) * 2 % 10);
|
||||
var c1 = new[] { 1, 3, 5, 7 }.Sum(m => (int)char.GetNumericValue(vatToCheck[m]));
|
||||
var c10 = (10 - (r + c1) % 10) % 10;
|
||||
// end check digit calculation
|
||||
// return validation check - depending on with or with or without EU extension `01`
|
||||
return vatToCheck.Length == 10
|
||||
? $"{vatToCheck[..9]}{c10}" == vatNumber
|
||||
: $"{vatToCheck[..9]}{c10}01" == vatNumber;
|
||||
// calculate check digit
|
||||
var c10 = C10(vatToCheck);
|
||||
// return comparison
|
||||
return $"{vatToCheck[..9]}{c10}" == vatNumber;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calculate check digit for swedish org number
|
||||
/// </summary>
|
||||
/// <param name="orgNumber"></param>
|
||||
/// <returns></returns>
|
||||
private static int C10(string orgNumber)
|
||||
{
|
||||
// https://wiki.scn.sap.com/wiki/display/CRM/Sweden
|
||||
// 12 digits 0 to 9
|
||||
// C10 = (10 – (18 + 5 + 1 + 8 + 4)MOD10 10) MOD10
|
||||
// R = S1 + S3 + S5 + S7 + S9
|
||||
// Si = int(Ci/5) + (Ci*2)MOD10)
|
||||
// https://www.skatteverket.se/skatter/mervardesskattmoms/momsregistreringsnummer.4.18e1b10334ebe8bc80002649.html
|
||||
// C11 C12 == 01 (De två sista siffrorna är alltid 01)
|
||||
|
||||
var r = new[] { 0, 2, 4, 6, 8 }
|
||||
.Sum(m => (int)char.GetNumericValue(orgNumber[m]) / 5 +
|
||||
(int)char.GetNumericValue(orgNumber[m]) * 2 % 10);
|
||||
var c1 = new[] { 1, 3, 5, 7 }.Sum(m => (int)char.GetNumericValue(orgNumber[m]));
|
||||
var c10 = (10 - (r + c1) % 10) % 10;
|
||||
return c10;
|
||||
// end check digit calculation
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
@ -193,17 +217,4 @@ public class VatUtils
|
|||
|
||||
return sum % 11 == 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sanitize Vat number to it's raw numbers
|
||||
/// </summary>
|
||||
/// <param name="vatNumber"></param>
|
||||
/// <returns></returns>
|
||||
private static string SanitizeVatNumber(string vatNumber)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(vatNumber))
|
||||
return "";
|
||||
var regexObj = new Regex(@"[^\d]");
|
||||
return regexObj.Replace(vatNumber, "");
|
||||
}
|
||||
}
|
|
@ -126,6 +126,7 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
|
||||
if (Report.DayTypeEnum.ToLower().Contains("leave"))
|
||||
{
|
||||
// ensure no distances in calculation
|
||||
Report.Figures.KmMorning = 0;
|
||||
Report.Figures.KmEvening = 0;
|
||||
}
|
||||
|
@ -188,6 +189,7 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
await ProfileService.SetDateConfirmed(false);
|
||||
Navigator.NavigateTo($"/advisor/reports/view/{_workDate:yyyy-MM-dd}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Submit report
|
||||
/// </summary>
|
||||
|
@ -227,20 +229,22 @@ public partial class AdvisorReportCreatePage : 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"))
|
||||
{
|
||||
// ensure no distances in calculation
|
||||
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;
|
||||
else
|
||||
{
|
||||
// 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));
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"appInfo": {
|
||||
"name": "Wonky Online",
|
||||
"version": "0.102.7",
|
||||
"version": "0.103.xxx",
|
||||
"rc": true,
|
||||
"sandBox": false,
|
||||
"image": "grumpy-coder.png"
|
||||
},
|
||||
"apiConfig": {
|
||||
"baseUrl": "https://edu.innotec.dk",
|
||||
"baseUrl": "https://dev.innotec.dk",
|
||||
"catalog": "api/v2/catalog/country",
|
||||
"crmCustomers": "api/v2/crm/companies",
|
||||
"crmInventoryExt": "history/inventory",
|
||||
|
@ -36,7 +36,7 @@
|
|||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"Default": "Information",
|
||||
"System": "Information",
|
||||
"Microsoft": "Information"
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue