This commit is contained in:
2023-01-04 15:47:08 +00:00
parent 588d2d4f37
commit db5c713312
2 changed files with 142 additions and 84 deletions

View File

@@ -350,106 +350,106 @@ namespace Sockeye.Biz
#region CASES
// log.LogInformation("RFImport Cases");
// //case projects to be tags
// List<NameIdItem> CaseProjectList = new List<NameIdItem>();
// {
// res = await client.GetAsync($"{URL_ROCKFISH}api/rfcaseproject");
// responseText = await res.Content.ReadAsStringAsync();
log.LogInformation("RFImport Cases");
//case projects to be tags
List<NameIdItem> CaseProjectList = new List<NameIdItem>();
{
res = await client.GetAsync($"{URL_ROCKFISH}api/rfcaseproject");
responseText = await res.Content.ReadAsStringAsync();
// var jaRFCaseProjectList = JArray.Parse(responseText);
// foreach (JObject jRFCaseProject in jaRFCaseProjectList)
// {
// CaseProjectList.Add(new NameIdItem() { Name = jRFCaseProject["name"].Value<string>(), Id = jRFCaseProject["id"].Value<long>() });
var jaRFCaseProjectList = JArray.Parse(responseText);
foreach (JObject jRFCaseProject in jaRFCaseProjectList)
{
CaseProjectList.Add(new NameIdItem() { Name = jRFCaseProject["name"].Value<string>(), Id = jRFCaseProject["id"].Value<long>() });
// }
}
// }
// {
// res = await client.GetAsync($"{URL_ROCKFISH}api/rfcase/list");
// responseText = await res.Content.ReadAsStringAsync();
// var jaRFCaseList = JArray.Parse(responseText);
// //some cases are missing the start date so substitute a close other case date (not critical but sb at least in the ballpark for list viewing purposes)
// DateTime dtTempCreated = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc);
// foreach (JObject jRFCase in jaRFCaseList.Reverse())
// {
}
{
res = await client.GetAsync($"{URL_ROCKFISH}api/rfcase/list");
responseText = await res.Content.ReadAsStringAsync();
var jaRFCaseList = JArray.Parse(responseText);
//some cases are missing the start date so substitute a close other case date (not critical but sb at least in the ballpark for list viewing purposes)
DateTime dtTempCreated = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc);
foreach (JObject jRFCase in jaRFCaseList.Reverse())
{
// var g = new GZCase();
// g.CaseId = jRFCase["id"].Value<long>();
// g.Closed = DateUtil.EpochToDateNullIsNull(jRFCase["dtClosed"].Value<long?>());
// //NOTE: closed in rockfish was the date at midnight in GMT
// //so to be in the same day as here need to add a few hours, let's say 8 am for each so add 8 hours
// if (g.Closed != null)
// {
// g.Closed = ((DateTime)g.Closed).AddHours(16);
// }
var g = new GZCase();
g.CaseId = jRFCase["id"].Value<long>();
g.Closed = DateUtil.EpochToDateNullIsNull(jRFCase["dtClosed"].Value<long?>());
//NOTE: closed in rockfish was the date at midnight in GMT
//so to be in the same day as here need to add a few hours, let's say 8 am for each so add 8 hours
if (g.Closed != null)
{
g.Closed = ((DateTime)g.Closed).AddHours(16);
}
// //fuckery to try to insert a at least semi close date when created date is missing
// DateTime? dtTemp = DateUtil.EpochToDateNullIsNull(jRFCase["dtCreated"].Value<long?>());
// if (dtTemp == null)
// {
// dtTemp = dtTempCreated;
// }
// else
// {
// dtTempCreated = (DateTime)dtTemp;
// }
// g.Created = (DateTime)dtTemp;
// g.Name = jRFCase["title"].Value<string>();
// g.Notes = jRFCase["notes"].Value<string>();
//fuckery to try to insert a at least semi close date when created date is missing
DateTime? dtTemp = DateUtil.EpochToDateNullIsNull(jRFCase["dtCreated"].Value<long?>());
if (dtTemp == null)
{
dtTemp = dtTempCreated;
}
else
{
dtTempCreated = (DateTime)dtTemp;
}
g.Created = (DateTime)dtTemp;
g.Name = jRFCase["title"].Value<string>();
g.Notes = jRFCase["notes"].Value<string>();
// var ver = jRFCase["releaseVersion"].Value<string>();
// if (!string.IsNullOrWhiteSpace(ver))
// g.Notes += $"\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\nReleased on version:{ver}";
var ver = jRFCase["releaseVersion"].Value<string>();
if (!string.IsNullOrWhiteSpace(ver))
g.Notes += $"\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\nReleased on version:{ver}";
// var releaseNotes = jRFCase["releaseNotes"].Value<string>();
// if (!string.IsNullOrWhiteSpace(releaseNotes))
// g.Notes += $"\nRelease notes:{releaseNotes}";
var releaseNotes = jRFCase["releaseNotes"].Value<string>();
if (!string.IsNullOrWhiteSpace(releaseNotes))
g.Notes += $"\nRelease notes:{releaseNotes}";
// //Project name to tags
// g.Tags.Add(CaseProjectList.FirstOrDefault(z => z.Id == jRFCase["rfCaseProjectId"].Value<long>()).Name.Replace("z_", "legacy-"));
//Project name to tags
g.Tags.Add(CaseProjectList.FirstOrDefault(z => z.Id == jRFCase["rfCaseProjectId"].Value<long>()).Name.Replace("z_", "legacy-"));
// //priority to tags
// g.Tags.Add($"{jRFCase["priority"].Value<long>()}-priority");
//priority to tags
g.Tags.Add($"{jRFCase["priority"].Value<long>()}-priority");
// //check for attachments and just add as a note, don't bother with actual transfer of attachment, there aren't a lot and most are way in the past and not required for anything
// //if needed in future can manually xfer it over from the rockfish.sqlite db directly using DB BRowser for sqlite which allows opening the blob from the rfcaseblob table and saving it
// res = await client.GetAsync($"{URL_ROCKFISH}api/rfcase/{g.CaseId}/attachments");
// responseText = await res.Content.ReadAsStringAsync();
// var jAttachments = JObject.Parse(responseText);
// if (jAttachments["attach"].Count() > 0)
// {
// g.Notes += "\n********\nRockfish attachments\n";
// foreach (JObject jAttachmentRecord in jAttachments["attach"])
// {
// g.Notes += $"File: \"{jAttachmentRecord["name"].Value<string>()}\", rfcaseblob table id: {jAttachmentRecord["id"].Value<long>()}\n";
//check for attachments and just add as a note, don't bother with actual transfer of attachment, there aren't a lot and most are way in the past and not required for anything
//if needed in future can manually xfer it over from the rockfish.sqlite db directly using DB BRowser for sqlite which allows opening the blob from the rfcaseblob table and saving it
res = await client.GetAsync($"{URL_ROCKFISH}api/rfcase/{g.CaseId}/attachments");
responseText = await res.Content.ReadAsStringAsync();
var jAttachments = JObject.Parse(responseText);
if (jAttachments["attach"].Count() > 0)
{
g.Notes += "\n********\nRockfish attachments\n";
foreach (JObject jAttachmentRecord in jAttachments["attach"])
{
g.Notes += $"File: \"{jAttachmentRecord["name"].Value<string>()}\", rfcaseblob table id: {jAttachmentRecord["id"].Value<long>()}\n";
// }
// g.Notes += "\n********\n";
// }
}
g.Notes += "\n********\n";
}
// GZCaseBiz biz = GZCaseBiz.GetBiz(ct);
// await biz.CreateAsync(g);
GZCaseBiz biz = GZCaseBiz.GetBiz(ct);
await biz.CreateAsync(g);
// //attachments example 86400000
// // /api/rfcase/4360/attachments
// //{"dlkey":"ZFkAUpo1L0Gi3Q9aO5szkA","attach":[{"id":259,"name":"desired weight calcs.txt"}]}
// //{"dlkey":"iR6ncD70CkzkozyT0otA","attach":[]}
//attachments example 86400000
// /api/rfcase/4360/attachments
//{"dlkey":"ZFkAUpo1L0Gi3Q9aO5szkA","attach":[{"id":259,"name":"desired weight calcs.txt"}]}
//{"dlkey":"iR6ncD70CkzkozyT0otA","attach":[]}
// }// all cases loop
}// all cases loop
// //Start next case with a new sequence caseid of 4444
// using (var command = ct.Database.GetDbConnection().CreateCommand())
// {
// command.CommandText = $"ALTER SEQUENCE agzcase_caseid_seq RESTART WITH 4443;";
// await ct.Database.OpenConnectionAsync();
// await command.ExecuteNonQueryAsync();
// await ct.Database.CloseConnectionAsync();
// }
// }
//Start next case with a new sequence caseid of 4444
using (var command = ct.Database.GetDbConnection().CreateCommand())
{
command.CommandText = $"ALTER SEQUENCE agzcase_caseid_seq RESTART WITH 4444;";
await ct.Database.OpenConnectionAsync();
await command.ExecuteNonQueryAsync();
await ct.Database.CloseConnectionAsync();
}
}
#endregion cases

View File

@@ -1,6 +1,26 @@
client - open / edit all the things
LICENSE NOTES
Sockeye should generate a license on a sale receipt, maybe after a slight delay. Generated license should be in the list of licenses but have a unfulfilled status of some kind so it's ready for me to visually see purchases applicable and confirm approve and send it with one click but it's not doing it itself.
If more purchases come on that supply to take customer for v7 then it should regenerate a new license or I guess edit the one it made before and just add to it.
Idea bring that all I have to do is open they list off licenses and just release any that are good to go.
UI should show the purchases that go into a license so can confirm visually without having to click anywhere else.
This way is all but automatic in pero for full automation later.
Maybe even a semi automatic dead man switch that will just send it after 24 guess if I don't once it's confirmed to work properly.
So need properties added to license object for fulfilled status and a property indicating sent to customer and a menu options to send manually maybe too.
I guess will need a template for email messages as well.
Tier into notification system.
Don't forget some licenses are not done through SHAREitb do must support manual generation from Paypal etc
ALSO
Needs manual license generation for v7 still
=========
PURCHASE drives new licensing ui
To automate as much as possible need following:
@@ -71,4 +91,42 @@ Also, sidebar, check if can pay d.o. in advance, or do I want that??
new roles and bizroles set appropo
Developer - rw cases
Support - read cases, read sales and customer data?
Sales - licenses
Sales - licenses
==============================
certbot expand
root@devops:/etc/nginx/sites-available# certbot --nginx --cert-name test.onayanova.com -d test.onayanova.com,subtest.onayanova.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
You are updating certificate test.onayanova.com to include new domain(s):
+ subtest.onayanova.com
You are also removing previously included domain(s):
(None)
Did you intend to make this change?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(U)pdate certificate/(C)ancel: u
Renewing an existing certificate for test.onayanova.com and subtest.onayanova.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/test.onayanova.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/test.onayanova.com/privkey.pem
This certificate expires on 2023-04-04.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for test.onayanova.com to /etc/nginx/sites-enabled/default
Could not install certificate
NEXT STEPS:
- The certificate was saved, but could not be installed (installer: nginx). After fixing the error shown below, try installing it again by running:
certbot install --cert-name test.onayanova.com
Could not automatically find a matching server block for subtest.onayanova.com. Set the `server_name` directive to use the Nginx installer.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.