8.0.3 release

This commit is contained in:
2022-08-16 02:45:32 +00:00
parent f9616cd118
commit aa03db0aef
21 changed files with 125 additions and 101 deletions

View File

@@ -4,8 +4,8 @@
</PropertyGroup>
<PropertyGroup>
<GenerateFullPaths>true</GenerateFullPaths>
<Version>8.0.2</Version>
<FileVersion>8.0.2.0</FileVersion>
<Version>8.0.3</Version>
<FileVersion>8.0.3.0</FileVersion>
<ApplicationIcon>ayanova.ico</ApplicationIcon>
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
<noWarn>1591</noWarn>

View File

@@ -2228,11 +2228,12 @@ namespace AyaNova.Biz
if (proposedObj.ServiceStartDate > proposedObj.ServiceStopDate)
AddError(ApiErrorCode.VALIDATION_STARTDATE_AFTER_ENDDATE, "ServiceStartDate");
if (proposedObj.ServiceRateQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "ServiceRateQuantity");
if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
//case 4171 removed
// if (proposedObj.ServiceRateQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "ServiceRateQuantity");
//case 4171 removed
// if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
//Any form customizations to validate?
var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.PM.ToString());
@@ -2626,8 +2627,9 @@ namespace AyaNova.Biz
if (proposedObj.LoanUnitId < 1 || !await ct.LoanUnit.AnyAsync(x => x.Id == proposedObj.LoanUnitId))
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "LoanUnitId");
if (proposedObj.Quantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Quantity");
//case 4171 removed
// if (proposedObj.Quantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Quantity");
//Any form customizations to validate?
@@ -3653,9 +3655,9 @@ namespace AyaNova.Biz
return;
}
if (proposedObj.EstimatedQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "EstimatedQuantity");
//case 4171 removed
// if (proposedObj.EstimatedQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "EstimatedQuantity");
//Start date AND end date must both be null or both contain values
@@ -4319,11 +4321,12 @@ namespace AyaNova.Biz
return;
}
if (proposedObj.TravelRateQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "TravelRateQuantity");
//case 4171 removed
// if (proposedObj.TravelRateQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "TravelRateQuantity");
if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
// if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
//Any form customizations to validate?
var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.PM.ToString());

View File

@@ -1111,7 +1111,7 @@ namespace AyaNova.Biz
var newStatusInfo = await ct.QuoteStatus.AsNoTracking().FirstOrDefaultAsync(x => x.Id == newObject.QuoteStatusId);
quote.LastStatusId = newObject.QuoteStatusId;
await ct.SaveChangesAsync();
newObject.NewQuoteConcurrency=quote.Concurrency;
newObject.NewQuoteConcurrency = quote.Concurrency;
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.QuoteStatus, AyaEvent.Created), ct);
await StateHandlePotentialNotificationEvent(AyaEvent.Created, newObject);
@@ -1294,7 +1294,7 @@ namespace AyaNova.Biz
//Object tags must match and Customer tags must match
if (NotifyEventHelper.ObjectHasAllSubscriptionTags(QuoteInfo.Tags, sub.Tags) && NotifyEventHelper.ObjectHasAllSubscriptionTags(custInfo.Tags, sub.CustomerTags))
{
CustomerNotifyEvent n = new CustomerNotifyEvent()
{
EventType = NotifyEventType.QuoteStatusChange,
@@ -2461,11 +2461,12 @@ namespace AyaNova.Biz
if (proposedObj.ServiceStartDate > proposedObj.ServiceStopDate)
AddError(ApiErrorCode.VALIDATION_STARTDATE_AFTER_ENDDATE, "ServiceStartDate");
if (proposedObj.ServiceRateQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "ServiceRateQuantity");
//case 4171 removed
// if (proposedObj.ServiceRateQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "ServiceRateQuantity");
if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
// if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
//Any form customizations to validate?
var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.Quote.ToString());
@@ -2864,11 +2865,12 @@ namespace AyaNova.Biz
}
}
if (proposedObj.LoanUnitId < 1 || !await ct.LoanUnit.AnyAsync(x => x.Id == proposedObj.LoanUnitId))
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "LoanUnitId");
//case 4171 removed
// if (proposedObj.LoanUnitId < 1 || !await ct.LoanUnit.AnyAsync(x => x.Id == proposedObj.LoanUnitId))
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "LoanUnitId");
if (proposedObj.Quantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Quantity");
// if (proposedObj.Quantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Quantity");
//Any form customizations to validate?
@@ -3679,8 +3681,9 @@ namespace AyaNova.Biz
return;
}
if (proposedObj.Quantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Quantity");
//case 4171 removed
// if (proposedObj.Quantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Quantity");
//Any form customizations to validate?
var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.Quote.ToString());
@@ -3927,8 +3930,9 @@ namespace AyaNova.Biz
}
}
if (proposedObj.EstimatedQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "EstimatedQuantity");
//case 4171 removed
// if (proposedObj.EstimatedQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "EstimatedQuantity");
//Start date AND end date must both be null or both contain values
@@ -4614,11 +4618,12 @@ namespace AyaNova.Biz
return;
}
if (proposedObj.TravelRateQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "TravelRateQuantity");
//case 4171 removed
// if (proposedObj.TravelRateQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "TravelRateQuantity");
if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
// if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
//Any form customizations to validate?
var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.Quote.ToString());

View File

@@ -1687,8 +1687,8 @@ namespace AyaNova.Biz
return null;
else
{
if(newObject.UserId==0)
newObject.UserId=UserId;
if (newObject.UserId == 0)
newObject.UserId = UserId;
await ct.WorkOrderState.AddAsync(newObject);
var wo = await ct.WorkOrder.FirstOrDefaultAsync(x => x.Id == newObject.WorkOrderId);
@@ -3261,12 +3261,13 @@ namespace AyaNova.Biz
if (proposedObj.ServiceStartDate > proposedObj.ServiceStopDate)
AddError(ApiErrorCode.VALIDATION_STARTDATE_AFTER_ENDDATE, "ServiceStartDate");
//case 4171 removed
// if (proposedObj.ServiceRateQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "ServiceRateQuantity");
if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
//case 4171 removed
// if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
//Any form customizations to validate?
var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.WorkOrder.ToString());//all workorder sub items use the workorder key for customization
@@ -3703,11 +3704,12 @@ namespace AyaNova.Biz
}
}
if (proposedObj.LoanUnitId < 1 || !await ct.LoanUnit.AnyAsync(x => x.Id == proposedObj.LoanUnitId))
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "LoanUnitId");
//case 4171 removed
// if (proposedObj.LoanUnitId < 1 || !await ct.LoanUnit.AnyAsync(x => x.Id == proposedObj.LoanUnitId))
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "LoanUnitId");
if (proposedObj.Quantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Quantity");
// if (proposedObj.Quantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Quantity");
//Any form customizations to validate?
@@ -5605,8 +5607,9 @@ namespace AyaNova.Biz
}
}
if (proposedObj.EstimatedQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "EstimatedQuantity");
//case 4171 removed
// if (proposedObj.EstimatedQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "EstimatedQuantity");
//Start date AND end date must both be null or both contain values
@@ -6422,11 +6425,12 @@ namespace AyaNova.Biz
return;
}
if (proposedObj.TravelRateQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "TravelRateQuantity");
//case 4171 removed
// if (proposedObj.TravelRateQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "TravelRateQuantity");
if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
// if (proposedObj.NoChargeQuantity < 0)//negative quantities are not allowed
// AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "NoChargeQuantity");
//Any form customizations to validate?
var FormCustomization = await ct.FormCustom.AsNoTracking().SingleOrDefaultAsync(z => z.FormKey == AyaType.WorkOrder.ToString());//all workorder sub items use the workorder key for customization
@@ -6650,7 +6654,7 @@ namespace AyaNova.Biz
//cache it
var unitInfo = await ct.Unit.AsNoTracking()
.Where(x => x.Id == o.UnitId)
.Select(x => new { x.Serial, x.Description, x.UnitModelId, x.Address, x.City, x.Region, x.Country, x.Latitude, x.Longitude, x.Metered})
.Select(x => new { x.Serial, x.Description, x.UnitModelId, x.Address, x.City, x.Region, x.Country, x.Latitude, x.Longitude, x.Metered })
.FirstOrDefaultAsync();
vc.Add(unitInfo.Serial, "unitserial", o.UnitId);
vc.Add(unitInfo.Description, "unitdesc", o.UnitId);

View File

@@ -537,7 +537,7 @@
"LogFile": "Log file",
"Logout": "Log out",
"MaintenanceExpired": "Maintenance expired",
"MaintenanceExpiredNote": "The support and updates subscription has now expired\nAyaNova can not be updated and support is no longer available",
"MaintenanceExpiredNote": "The Maintenance plan has now expired\nAyaNova can not be updated and support is no longer available",
"MapUrlTemplate": "Map URL template",
"MediumLogo": "Medium sized logo",
"Memo": "Memo",
@@ -1066,7 +1066,7 @@
"StopWords5": "?",
"StopWords6": "?",
"StopWords7": "?",
"SupportedUntil": "Support and updates expiration date",
"SupportedUntil": "Maintenance plan expiration date",
"Table": "Table",
"Tag": "Tag",
"TaggedWith": "Tagged with",

View File

@@ -5,7 +5,7 @@ namespace AyaNova.Util
/// </summary>
internal static class AyaNovaVersion
{
public const string VersionString = "8.0.2";
public const string VersionString = "8.0.3";
public const string FullNameAndVersion = "AyaNova server " + VersionString;
public const string CurrentApiVersion="v8";
}//eoc

View File

@@ -59,11 +59,7 @@ namespace AyaNova.Core
private const string TRIAL_FEATURE_NAME = "TrialMode";
//This feature name means it's a SAAS or rental mode key for month to month hosted service
//effectively what it does now 2022-08-04 17:26:20 is nothing at all
//license expiry is still controlled by checking Temporary key / expires in rockfish v8 license generator page
//which in turn causes expiry date to be displayed in the license UI
//I think this may be redundant but I'll keep it for now maybe it might help in future to offer a rental payment UI inside AyaNova or something
private const string RENTAL_FEATURE_NAME = "ServiceMode";
private const string RENTAL_FEATURE_NAME = "Subscription";
//Trial key magic number for development and testing, all other guids will be fully licensed