This commit is contained in:
@@ -350,106 +350,106 @@ namespace Sockeye.Biz
|
|||||||
|
|
||||||
#region CASES
|
#region CASES
|
||||||
|
|
||||||
// log.LogInformation("RFImport Cases");
|
log.LogInformation("RFImport Cases");
|
||||||
// //case projects to be tags
|
//case projects to be tags
|
||||||
// List<NameIdItem> CaseProjectList = new List<NameIdItem>();
|
List<NameIdItem> CaseProjectList = new List<NameIdItem>();
|
||||||
// {
|
{
|
||||||
// res = await client.GetAsync($"{URL_ROCKFISH}api/rfcaseproject");
|
res = await client.GetAsync($"{URL_ROCKFISH}api/rfcaseproject");
|
||||||
// responseText = await res.Content.ReadAsStringAsync();
|
responseText = await res.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
// var jaRFCaseProjectList = JArray.Parse(responseText);
|
var jaRFCaseProjectList = JArray.Parse(responseText);
|
||||||
// foreach (JObject jRFCaseProject in jaRFCaseProjectList)
|
foreach (JObject jRFCaseProject in jaRFCaseProjectList)
|
||||||
// {
|
{
|
||||||
// CaseProjectList.Add(new NameIdItem() { Name = jRFCaseProject["name"].Value<string>(), Id = jRFCaseProject["id"].Value<long>() });
|
CaseProjectList.Add(new NameIdItem() { Name = jRFCaseProject["name"].Value<string>(), Id = jRFCaseProject["id"].Value<long>() });
|
||||||
|
|
||||||
// }
|
}
|
||||||
|
|
||||||
// }
|
}
|
||||||
// {
|
{
|
||||||
// res = await client.GetAsync($"{URL_ROCKFISH}api/rfcase/list");
|
res = await client.GetAsync($"{URL_ROCKFISH}api/rfcase/list");
|
||||||
// responseText = await res.Content.ReadAsStringAsync();
|
responseText = await res.Content.ReadAsStringAsync();
|
||||||
// var jaRFCaseList = JArray.Parse(responseText);
|
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)
|
//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);
|
DateTime dtTempCreated = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||||
// foreach (JObject jRFCase in jaRFCaseList.Reverse())
|
foreach (JObject jRFCase in jaRFCaseList.Reverse())
|
||||||
// {
|
{
|
||||||
|
|
||||||
// var g = new GZCase();
|
var g = new GZCase();
|
||||||
// g.CaseId = jRFCase["id"].Value<long>();
|
g.CaseId = jRFCase["id"].Value<long>();
|
||||||
// g.Closed = DateUtil.EpochToDateNullIsNull(jRFCase["dtClosed"].Value<long?>());
|
g.Closed = DateUtil.EpochToDateNullIsNull(jRFCase["dtClosed"].Value<long?>());
|
||||||
// //NOTE: closed in rockfish was the date at midnight in GMT
|
//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
|
//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)
|
if (g.Closed != null)
|
||||||
// {
|
{
|
||||||
// g.Closed = ((DateTime)g.Closed).AddHours(16);
|
g.Closed = ((DateTime)g.Closed).AddHours(16);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// //fuckery to try to insert a at least semi close date when created date is missing
|
//fuckery to try to insert a at least semi close date when created date is missing
|
||||||
// DateTime? dtTemp = DateUtil.EpochToDateNullIsNull(jRFCase["dtCreated"].Value<long?>());
|
DateTime? dtTemp = DateUtil.EpochToDateNullIsNull(jRFCase["dtCreated"].Value<long?>());
|
||||||
// if (dtTemp == null)
|
if (dtTemp == null)
|
||||||
// {
|
{
|
||||||
// dtTemp = dtTempCreated;
|
dtTemp = dtTempCreated;
|
||||||
// }
|
}
|
||||||
// else
|
else
|
||||||
// {
|
{
|
||||||
// dtTempCreated = (DateTime)dtTemp;
|
dtTempCreated = (DateTime)dtTemp;
|
||||||
// }
|
}
|
||||||
// g.Created = (DateTime)dtTemp;
|
g.Created = (DateTime)dtTemp;
|
||||||
// g.Name = jRFCase["title"].Value<string>();
|
g.Name = jRFCase["title"].Value<string>();
|
||||||
// g.Notes = jRFCase["notes"].Value<string>();
|
g.Notes = jRFCase["notes"].Value<string>();
|
||||||
|
|
||||||
// var ver = jRFCase["releaseVersion"].Value<string>();
|
var ver = jRFCase["releaseVersion"].Value<string>();
|
||||||
// if (!string.IsNullOrWhiteSpace(ver))
|
if (!string.IsNullOrWhiteSpace(ver))
|
||||||
// g.Notes += $"\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\nReleased on version:{ver}";
|
g.Notes += $"\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\nReleased on version:{ver}";
|
||||||
|
|
||||||
// var releaseNotes = jRFCase["releaseNotes"].Value<string>();
|
var releaseNotes = jRFCase["releaseNotes"].Value<string>();
|
||||||
// if (!string.IsNullOrWhiteSpace(releaseNotes))
|
if (!string.IsNullOrWhiteSpace(releaseNotes))
|
||||||
// g.Notes += $"\nRelease notes:{releaseNotes}";
|
g.Notes += $"\nRelease notes:{releaseNotes}";
|
||||||
|
|
||||||
// //Project name to tags
|
//Project name to tags
|
||||||
// g.Tags.Add(CaseProjectList.FirstOrDefault(z => z.Id == jRFCase["rfCaseProjectId"].Value<long>()).Name.Replace("z_", "legacy-"));
|
g.Tags.Add(CaseProjectList.FirstOrDefault(z => z.Id == jRFCase["rfCaseProjectId"].Value<long>()).Name.Replace("z_", "legacy-"));
|
||||||
|
|
||||||
// //priority to tags
|
//priority to tags
|
||||||
// g.Tags.Add($"{jRFCase["priority"].Value<long>()}-priority");
|
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
|
//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
|
//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");
|
res = await client.GetAsync($"{URL_ROCKFISH}api/rfcase/{g.CaseId}/attachments");
|
||||||
// responseText = await res.Content.ReadAsStringAsync();
|
responseText = await res.Content.ReadAsStringAsync();
|
||||||
// var jAttachments = JObject.Parse(responseText);
|
var jAttachments = JObject.Parse(responseText);
|
||||||
// if (jAttachments["attach"].Count() > 0)
|
if (jAttachments["attach"].Count() > 0)
|
||||||
// {
|
{
|
||||||
// g.Notes += "\n********\nRockfish attachments\n";
|
g.Notes += "\n********\nRockfish attachments\n";
|
||||||
// foreach (JObject jAttachmentRecord in jAttachments["attach"])
|
foreach (JObject jAttachmentRecord in jAttachments["attach"])
|
||||||
// {
|
{
|
||||||
// g.Notes += $"File: \"{jAttachmentRecord["name"].Value<string>()}\", rfcaseblob table id: {jAttachmentRecord["id"].Value<long>()}\n";
|
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);
|
GZCaseBiz biz = GZCaseBiz.GetBiz(ct);
|
||||||
// await biz.CreateAsync(g);
|
await biz.CreateAsync(g);
|
||||||
|
|
||||||
// //attachments example 86400000
|
//attachments example 86400000
|
||||||
// // /api/rfcase/4360/attachments
|
// /api/rfcase/4360/attachments
|
||||||
// //{"dlkey":"ZFkAUpo1L0Gi3Q9aO5szkA","attach":[{"id":259,"name":"desired weight calcs.txt"}]}
|
//{"dlkey":"ZFkAUpo1L0Gi3Q9aO5szkA","attach":[{"id":259,"name":"desired weight calcs.txt"}]}
|
||||||
// //{"dlkey":"iR6ncD70CkzkozyT0otA","attach":[]}
|
//{"dlkey":"iR6ncD70CkzkozyT0otA","attach":[]}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// }// all cases loop
|
}// all cases loop
|
||||||
|
|
||||||
// //Start next case with a new sequence caseid of 4444
|
//Start next case with a new sequence caseid of 4444
|
||||||
// using (var command = ct.Database.GetDbConnection().CreateCommand())
|
using (var command = ct.Database.GetDbConnection().CreateCommand())
|
||||||
// {
|
{
|
||||||
// command.CommandText = $"ALTER SEQUENCE agzcase_caseid_seq RESTART WITH 4443;";
|
command.CommandText = $"ALTER SEQUENCE agzcase_caseid_seq RESTART WITH 4444;";
|
||||||
// await ct.Database.OpenConnectionAsync();
|
await ct.Database.OpenConnectionAsync();
|
||||||
// await command.ExecuteNonQueryAsync();
|
await command.ExecuteNonQueryAsync();
|
||||||
// await ct.Database.CloseConnectionAsync();
|
await ct.Database.CloseConnectionAsync();
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
#endregion cases
|
#endregion cases
|
||||||
|
|
||||||
|
|||||||
62
todo.txt
62
todo.txt
@@ -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
|
PURCHASE drives new licensing ui
|
||||||
To automate as much as possible need following:
|
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
|
new roles and bizroles set appropo
|
||||||
Developer - rw cases
|
Developer - rw cases
|
||||||
Support - read cases, read sales and customer data?
|
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.
|
||||||
|
|||||||
Reference in New Issue
Block a user