submit proker and approve/decline submission. untested

This commit is contained in:
nugroho 2025-06-25 02:14:57 +07:00
parent ebaaab67dc
commit 0bb5595122

View File

@ -348,10 +348,9 @@ public static partial class APIHandler
{ {
prokers.Run(async runner => prokers.Run(async runner =>
{ {
if (!await runner.RequestValidated(3)) return; if (!await runner.RequestValidated(3) || !Auth.TryGetUser(runner, out SafeUser CurrUser)) return;
List<ProkerJournal> Journals = []; List<ProkerJournal> Journals = [];
if (!Auth.TryGetUser(runner, out SafeUser CurrUser)) return; using SqlDataReader Prokers = await RunReaderAsync(CS, "SELECT * FROM [AllJournal] WHERE [ownerid] = @oi OR @oi IS NULL ORDER BY [ownerid] ASC, [kegiatan] ASC, [prokerid] ASC, [prokerjid] DESC", Query =>
using SqlDataReader Prokers = await RunReaderAsync(CS, "SELECT * FROM [AllJournal] WHERE [ownerid] = @oi OR @oi IS NULL", Query =>
{ {
Query.Parameters.AddWithValue("@oi", CurrUser.Level < 3 ? DBNull.Value : CurrUser.AgentID); Query.Parameters.AddWithValue("@oi", CurrUser.Level < 3 ? DBNull.Value : CurrUser.AgentID);
}, CTS.Token); }, CTS.Token);
@ -423,15 +422,16 @@ public static partial class APIHandler
_ = await CreateProker.ExecuteNonQueryAsync(CTS.Token); _ = await CreateProker.ExecuteNonQueryAsync(CTS.Token);
} }
using SqlCommand CreateJournal = Conn.CreateCommand(); using SqlCommand CreateJournal = Conn.CreateCommand();
DateTime Now = DateTime.Now;
CreateJournal.Transaction = Trans; CreateJournal.Transaction = Trans;
CreateJournal.CommandText = "INSERT INTO [proker_journal] VALUES(@pjid, @pkid, @agid, @stts, @nots, @docs, @tstp)"; CreateJournal.CommandText = "INSERT INTO [proker_journal] VALUES(@pjid, @pkid, @agid, @stts, @nots, @docs, @tstp)";
CreateJournal.Parameters.AddWithValue("@pjid", GenerateUuidV7()); CreateJournal.Parameters.AddWithValue("@pjid", GenerateUuidV7(Now));
CreateJournal.Parameters.AddWithValue("@pkid", ProkerID); CreateJournal.Parameters.AddWithValue("@pkid", ProkerID);
CreateJournal.Parameters.AddWithValue("@agid", AgentID); CreateJournal.Parameters.AddWithValue("@agid", AgentID);
CreateJournal.Parameters.AddWithValue("@stts", 0); CreateJournal.Parameters.AddWithValue("@stts", 0);
CreateJournal.Parameters.AddWithValue("@nots", string.Empty); CreateJournal.Parameters.AddWithValue("@nots", string.Empty);
CreateJournal.Parameters.AddWithValue("@docs", DBNull.Value); CreateJournal.Parameters.AddWithValue("@docs", DBNull.Value);
CreateJournal.Parameters.AddWithValue("@tstp", DateTime.Now); CreateJournal.Parameters.AddWithValue("@tstp", Now);
_ = await CreateJournal.ExecuteNonQueryAsync(CTS.Token); _ = await CreateJournal.ExecuteNonQueryAsync(CTS.Token);
}, CTS.Token); }, CTS.Token);
await runner.WriteJsonResponse(StatusCodes.Status201Created, "Proker Created and Journaled."); await runner.WriteJsonResponse(StatusCodes.Status201Created, "Proker Created and Journaled.");
@ -478,36 +478,58 @@ public static partial class APIHandler
await runner.WriteJsonResponse(StatusCodes.Status202Accepted, "Proker Updated."); await runner.WriteJsonResponse(StatusCodes.Status202Accepted, "Proker Updated.");
}); });
}) })
.Map("/approveproker", proker => .Map("/processpk", proker =>
{ {
proker.Run(async runner => proker.Run(async runner =>
{ {
if (!await runner.RequestValidated(2, "POST", true) || if (!await runner.RequestValidated(2, "POST", true) || !Auth.TryGetUser(runner, out SafeUser CurrUser) ||
await runner.TryGetBodyJsonAsync(["agentid", "year"], CTS.Token) is not Dictionary<string, JsonElement> InElement) return; await runner.TryGetBodyJsonAsync(["agentid", "year", "newstatus", "notes"], CTS.Token) is not Dictionary<string, JsonElement> InElement) return;
if ( if (
InElement["agentid"].GetString() is not string AgentID || AgentID.Equals(string.Empty) || InElement["agentid"].GetString() is not string AgentID || AgentID.Equals(string.Empty) ||
InElement["year"].GetInt16() is short Year && Year < 2020 ||
InElement["newstatus"].GetByte() is byte Status && Status != 1 && Status != 3 ||
InElement["notes"].GetString() is not string Notes || Notes.Equals(string.Empty)
)
{
await runner.WriteJsonResponse(StatusCodes.Status400BadRequest, "Required property is of invalid format.");
return;
}
await RunNonQueryAsync(CS, "INSERT INTO [proker_journal] SELECT @pjid, [prokerid], @agid, @st, @nots, null, @tstp FROM [LatestJournal] WHERE [ownerid] = @oi AND [year] = @yr AND [status] = 2 ORDER BY [kegiatan]", Query =>
{
DateTime Now = DateTime.Now;
Query.Parameters.AddWithValue("@pjid", GenerateUuidV7(Now));
Query.Parameters.AddWithValue("@agid", CurrUser.AgentID);
Query.Parameters.AddWithValue("@st", Status);
Query.Parameters.AddWithValue("@nots", Notes);
Query.Parameters.AddWithValue("@tstp", Now);
Query.Parameters.AddWithValue("@oi", AgentID);
Query.Parameters.AddWithValue("@yr", Year);
}, CTS.Token);
await runner.WriteJsonResponse(StatusCodes.Status202Accepted, "Proker submission processed.");
});
})
.Map("/submitpk", proker =>
{
proker.Run(async runner =>
{
if (!await runner.RequestValidated(3, "POST", true) || !Auth.TryGetUser(runner, out SafeUser CurrUser) ||
await runner.TryGetBodyJsonAsync(["year"], CTS.Token) is not Dictionary<string, JsonElement> InElement) return;
if (
InElement["year"].GetInt16() is short Year && Year < 2020 InElement["year"].GetInt16() is short Year && Year < 2020
) )
{ {
await runner.WriteJsonResponse(StatusCodes.Status400BadRequest, "Required property is of invalid format."); await runner.WriteJsonResponse(StatusCodes.Status400BadRequest, "Required property is of invalid format.");
return; return;
} }
// do inside transaction await RunNonQueryAsync(CS, "INSERT INTO [proker_journal] SELECT @pjid, [prokerid], @oi, @st, @nots, null, @tstp FROM [LatestJournal] WHERE [ownerid] = @oi AND [year] = @yr AND [status] = 0 OR [status] = 1 ORDER BY [kegiatan]", Query =>
// select proker ids first, where prokerid and year {
// store in list DateTime Now = DateTime.Now;
// insert with loops; Query.Parameters.AddWithValue("@pjid", GenerateUuidV7(Now));
// _ = await RunNonQueryAsync(CS, "INSERT INTO [proker_journal] SELECT @pjid, VALUES(@pjid, @pkid, @agid, @stts, @nots, @docs, @tstp)", CreateJournal => Query.Parameters.AddWithValue("@tstp", Now);
// { Query.Parameters.AddWithValue("@oi", CurrUser.AgentID);
// CreateJournal.Parameters.AddWithValue("@pjid", GenerateUuidV7()); Query.Parameters.AddWithValue("@yr", Year);
// CreateJournal.Parameters.AddWithValue("@pkid", ProkerID); }, CTS.Token);
// CreateJournal.Parameters.AddWithValue("@agid", AgentID); await runner.WriteJsonResponse(StatusCodes.Status202Accepted, "Proker draft submitted.");
// CreateJournal.Parameters.AddWithValue("@stts", 0);
// CreateJournal.Parameters.AddWithValue("@nots", string.Empty);
// CreateJournal.Parameters.AddWithValue("@docs", DBNull.Value);
// CreateJournal.Parameters.AddWithValue("@tstp", DateTime.Now);
// },CTS.Token);
// await runner.WriteJsonResponse(StatusCodes.Status202Accepted, "Proker Updated.");
await runner.WriteJsonResponse(StatusCodes.Status501NotImplemented, "Not yet finished.");
}); });
}) })
.Map("/pushproker", proker => .Map("/pushproker", proker =>