Automatically create separators on ticket add
This commit is contained in:
parent
e4e54d0341
commit
0457d7c591
|
@ -12,27 +12,64 @@ using Microsoft.AspNetCore.Mvc.RazorPages;
|
|||
using Newtonsoft.Json;
|
||||
using Leg = bahnplan.web.database.Tables.Leg;
|
||||
|
||||
namespace bahnplan.web.Pages {
|
||||
public class TicketModel : PageModel {
|
||||
public int TripId;
|
||||
namespace bahnplan.web.Pages;
|
||||
|
||||
public void OnGet() {
|
||||
if (HttpContext.Session.GetString("authorized") != "true")
|
||||
public class TicketModel : PageModel {
|
||||
public int TripId;
|
||||
|
||||
public void OnGet() {
|
||||
if (HttpContext.Session.GetString("authorized") != "true")
|
||||
return;
|
||||
|
||||
using var db = new Database.DbConn();
|
||||
if (!string.IsNullOrWhiteSpace(Request.Query["tripid"].ToString()))
|
||||
if (db.Trips.First(p => p.TripId == int.Parse(Request.Query["tripid"].ToString())).UserId != int.Parse(HttpContext.Session.GetString("uid")))
|
||||
return;
|
||||
|
||||
using var db = new Database.DbConn();
|
||||
if (!string.IsNullOrWhiteSpace(Request.Query["tripid"].ToString()))
|
||||
if (db.Trips.First(p => p.TripId == int.Parse(Request.Query["tripid"].ToString())).UserId != int.Parse(HttpContext.Session.GetString("uid")))
|
||||
return;
|
||||
if (db.Tickets.Any(p => p.OrderId == Request.Query["order"].ToString())) {
|
||||
var tripId = Request.Query["action"] == "addleg"
|
||||
? int.Parse(Request.Query["tripid"])
|
||||
: db.InsertWithInt32Identity(new Trip { UserId = int.Parse(HttpContext.Session.GetString("uid")) });
|
||||
var ticketId = db.Tickets.First(p => p.OrderId == Request.Query["order"].ToString()).TicketId;
|
||||
var ticketId2 = db.Tickets.FirstOrDefault(p => p.OrderId == Request.Query["order"] + "_2")?.TicketId;
|
||||
|
||||
if (db.Tickets.Any(p => p.OrderId == Request.Query["order"].ToString())) {
|
||||
var tripId = Request.Query["action"] == "addleg"
|
||||
? int.Parse(Request.Query["tripid"])
|
||||
: db.InsertWithInt32Identity(new Trip { UserId = int.Parse(HttpContext.Session.GetString("uid")) });
|
||||
var ticketId = db.Tickets.First(p => p.OrderId == Request.Query["order"].ToString()).TicketId;
|
||||
var ticketId2 = db.Tickets.FirstOrDefault(p => p.OrderId == Request.Query["order"] + "_2")?.TicketId;
|
||||
var lastleg_ticket = 0;
|
||||
foreach (var leg in db.TicketLegs.Where(p => p.TicketId == ticketId).ToList()) {
|
||||
if (leg.TrainType == "placeholder") {
|
||||
db.Insert(new Leg {
|
||||
TripId = tripId,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TrainType = "placeholder",
|
||||
TrainNr = lastleg_ticket,
|
||||
ArrStation = "_",
|
||||
ArrStationId = 0,
|
||||
ArrTime = "_",
|
||||
DepStation = "_",
|
||||
DepStationId = 0,
|
||||
DepTime = db.Legs.First(p => p.LegId == lastleg_ticket).DepTime + "_placeholder"
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (var leg in db.TicketLegs.Where(p => p.TicketId == ticketId).ToList())
|
||||
lastleg_ticket = db.InsertWithInt32Identity(new Leg {
|
||||
TripId = tripId,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TrainType = leg.TrainType,
|
||||
TrainNr = leg.TrainNr,
|
||||
ArrStation = leg.ArrStation,
|
||||
ArrStationId = leg.ArrStationId,
|
||||
ArrTime = leg.ArrTime,
|
||||
DepStation = leg.DepStation,
|
||||
DepStationId = leg.DepStationId,
|
||||
DepTime = leg.DepTime,
|
||||
TicketId = leg.TicketId
|
||||
});
|
||||
}
|
||||
|
||||
if (ticketId2 != null) {
|
||||
var lastleg = 0;
|
||||
|
||||
foreach (var leg in db.TicketLegs.Where(p => p.TicketId == ticketId2).ToList())
|
||||
db.InsertWithInt32Identity(new Leg {
|
||||
TripId = tripId,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
|
@ -46,102 +83,144 @@ namespace bahnplan.web.Pages {
|
|||
DepTime = leg.DepTime,
|
||||
TicketId = leg.TicketId
|
||||
});
|
||||
|
||||
if (ticketId2 != null)
|
||||
foreach (var leg in db.TicketLegs.Where(p => p.TicketId == ticketId2).ToList())
|
||||
db.InsertWithInt32Identity(new Leg {
|
||||
TripId = tripId,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TrainType = leg.TrainType,
|
||||
TrainNr = leg.TrainNr,
|
||||
ArrStation = leg.ArrStation,
|
||||
ArrStationId = leg.ArrStationId,
|
||||
ArrTime = leg.ArrTime,
|
||||
DepStation = leg.DepStation,
|
||||
DepStationId = leg.DepStationId,
|
||||
DepTime = leg.DepTime,
|
||||
TicketId = leg.TicketId
|
||||
});
|
||||
|
||||
TripId = tripId;
|
||||
}
|
||||
|
||||
else {
|
||||
var request = new XDocument(new XElement("rqorderdetails", new XAttribute("version", "1.0"),
|
||||
new XElement("rqheader", new XAttribute("ts", "2019-10-31T23:20:48"), new XAttribute("l", "de"),
|
||||
new XAttribute("v", "19100000"), new XAttribute("d", "iPad7,5"), new XAttribute("os", "iOS_13.1.3"),
|
||||
new XAttribute("app", "NAVIGATOR")), new XElement("rqorder", new XAttribute("on", Request.Query["order"])),
|
||||
new XElement("authname", new XAttribute("tln", Request.Query["name"])))).ToString();
|
||||
var response = new WebClient().UploadString("https://fahrkarten.bahn.de/mobile/dbc/xs.go", "POST", request);
|
||||
var xmlobj = new XmlDocument();
|
||||
xmlobj.LoadXml(response);
|
||||
var json = JsonConvert.SerializeXmlNode(xmlobj);
|
||||
var parsed = TicketResponse.FromJson(json);
|
||||
TripId = tripId;
|
||||
}
|
||||
|
||||
var tripId = Request.Query["action"] == "addleg"
|
||||
? int.Parse(Request.Query["tripid"])
|
||||
: db.InsertWithInt32Identity(new Trip { UserId = int.Parse(HttpContext.Session.GetString("uid")) });
|
||||
else {
|
||||
var request = new XDocument(new XElement("rqorderdetails", new XAttribute("version", "1.0"),
|
||||
new XElement("rqheader", new XAttribute("ts", "2019-10-31T23:20:48"), new XAttribute("l", "de"),
|
||||
new XAttribute("v", "19100000"), new XAttribute("d", "iPad7,5"), new XAttribute("os", "iOS_13.1.3"),
|
||||
new XAttribute("app", "NAVIGATOR")), new XElement("rqorder", new XAttribute("on", Request.Query["order"])),
|
||||
new XElement("authname", new XAttribute("tln", Request.Query["name"])))).ToString();
|
||||
var response = new WebClient().UploadString("https://fahrkarten.bahn.de/mobile/dbc/xs.go", "POST", request);
|
||||
var xmlobj = new XmlDocument();
|
||||
xmlobj.LoadXml(response);
|
||||
var json = JsonConvert.SerializeXmlNode(xmlobj);
|
||||
var parsed = TicketResponse.FromJson(json);
|
||||
|
||||
int ticketId;
|
||||
int? ticketId2 = null;
|
||||
var tripId = Request.Query["action"] == "addleg"
|
||||
? int.Parse(Request.Query["tripid"])
|
||||
: db.InsertWithInt32Identity(new Trip { UserId = int.Parse(HttpContext.Session.GetString("uid")) });
|
||||
|
||||
switch (parsed.Rporderdetails.Order.Tcklist.Tck.Count) {
|
||||
case 1: {
|
||||
ticketId = db.InsertWithInt32Identity(new Ticket {
|
||||
OrderId = Request.Query["order"],
|
||||
TicketInfo = parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.Txt,
|
||||
TicketQr = parsed.Rporderdetails.Order.Tcklist.Tck[0].Htdata.Ht.First(p => p.Name == "barcode").Text,
|
||||
TicketSecCode = parsed.Rporderdetails.Order.Tcklist.Tck[0].Htdata.Ht.First(p => p.Name == "sichtmerkmal").Text,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TicketPkPass =
|
||||
parsed.Rporderdetails.Order.Tcklist.Tck[0]
|
||||
.Htdata.Ht.FirstOrDefault(p => p.Name == "pass")
|
||||
?.Text, // application/vnd.apple.pkpass;base64
|
||||
Traveller = parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.ReisenderVorname
|
||||
+ " "
|
||||
+ parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.ReisenderNachname
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
ticketId = db.InsertWithInt32Identity(new Ticket {
|
||||
OrderId = Request.Query["order"],
|
||||
TicketInfo = parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.Txt,
|
||||
TicketQr = parsed.Rporderdetails.Order.Tcklist.Tck[0].Htdata.Ht.First(p => p.Name == "barcode").Text,
|
||||
TicketSecCode = parsed.Rporderdetails.Order.Tcklist.Tck[0].Htdata.Ht.First(p => p.Name == "sichtmerkmal").Text,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TicketPkPass =
|
||||
parsed.Rporderdetails.Order.Tcklist.Tck[0]
|
||||
.Htdata.Ht.First(p => p.Name == "pass")
|
||||
.Text, // application/vnd.apple.pkpass;base64
|
||||
Traveller = parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.ReisenderVorname
|
||||
+ " "
|
||||
+ parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.ReisenderNachname
|
||||
});
|
||||
int ticketId;
|
||||
int? ticketId2 = null;
|
||||
|
||||
ticketId2 = db.InsertWithInt32Identity(new Ticket {
|
||||
OrderId = Request.Query["order"] + "_2",
|
||||
TicketInfo = parsed.Rporderdetails.Order.Tcklist.Tck[1].Mtk.Txt,
|
||||
TicketQr = parsed.Rporderdetails.Order.Tcklist.Tck[1].Htdata.Ht.First(p => p.Name == "barcode").Text,
|
||||
TicketSecCode = parsed.Rporderdetails.Order.Tcklist.Tck[1].Htdata.Ht.First(p => p.Name == "sichtmerkmal").Text,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TicketPkPass =
|
||||
parsed.Rporderdetails.Order.Tcklist.Tck[1]
|
||||
.Htdata.Ht.First(p => p.Name == "pass")
|
||||
.Text, // application/vnd.apple.pkpass;base64
|
||||
Traveller = parsed.Rporderdetails.Order.Tcklist.Tck[1].Mtk.ReisenderVorname
|
||||
+ " "
|
||||
+ parsed.Rporderdetails.Order.Tcklist.Tck[1].Mtk.ReisenderNachname
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
throw new Exception("Order contains zero or more than two tickets");
|
||||
}
|
||||
switch (parsed.Rporderdetails.Order.Tcklist.Tck.Count) {
|
||||
case 1: {
|
||||
ticketId = db.InsertWithInt32Identity(new Ticket {
|
||||
OrderId = Request.Query["order"],
|
||||
TicketInfo = parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.Txt,
|
||||
TicketQr = parsed.Rporderdetails.Order.Tcklist.Tck[0].Htdata.Ht.First(p => p.Name == "barcode").Text,
|
||||
TicketSecCode = parsed.Rporderdetails.Order.Tcklist.Tck[0].Htdata.Ht.First(p => p.Name == "sichtmerkmal").Text,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TicketPkPass =
|
||||
parsed.Rporderdetails.Order.Tcklist.Tck[0]
|
||||
.Htdata.Ht.FirstOrDefault(p => p.Name == "pass")
|
||||
?.Text, // application/vnd.apple.pkpass;base64
|
||||
Traveller = parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.ReisenderVorname
|
||||
+ " "
|
||||
+ parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.ReisenderNachname
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
ticketId = db.InsertWithInt32Identity(new Ticket {
|
||||
OrderId = Request.Query["order"],
|
||||
TicketInfo = parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.Txt,
|
||||
TicketQr = parsed.Rporderdetails.Order.Tcklist.Tck[0].Htdata.Ht.First(p => p.Name == "barcode").Text,
|
||||
TicketSecCode = parsed.Rporderdetails.Order.Tcklist.Tck[0].Htdata.Ht.First(p => p.Name == "sichtmerkmal").Text,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TicketPkPass =
|
||||
parsed.Rporderdetails.Order.Tcklist.Tck[0]
|
||||
.Htdata.Ht.First(p => p.Name == "pass")
|
||||
.Text, // application/vnd.apple.pkpass;base64
|
||||
Traveller = parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.ReisenderVorname
|
||||
+ " "
|
||||
+ parsed.Rporderdetails.Order.Tcklist.Tck[0].Mtk.ReisenderNachname
|
||||
});
|
||||
|
||||
foreach (var leg in parsed.Rporderdetails.Order.Schedulelist.Out.Trainlist.Train) {
|
||||
ticketId2 = db.InsertWithInt32Identity(new Ticket {
|
||||
OrderId = Request.Query["order"] + "_2",
|
||||
TicketInfo = parsed.Rporderdetails.Order.Tcklist.Tck[1].Mtk.Txt,
|
||||
TicketQr = parsed.Rporderdetails.Order.Tcklist.Tck[1].Htdata.Ht.First(p => p.Name == "barcode").Text,
|
||||
TicketSecCode = parsed.Rporderdetails.Order.Tcklist.Tck[1].Htdata.Ht.First(p => p.Name == "sichtmerkmal").Text,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TicketPkPass =
|
||||
parsed.Rporderdetails.Order.Tcklist.Tck[1]
|
||||
.Htdata.Ht.First(p => p.Name == "pass")
|
||||
.Text, // application/vnd.apple.pkpass;base64
|
||||
Traveller = parsed.Rporderdetails.Order.Tcklist.Tck[1].Mtk.ReisenderVorname
|
||||
+ " "
|
||||
+ parsed.Rporderdetails.Order.Tcklist.Tck[1].Mtk.ReisenderNachname
|
||||
});
|
||||
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
throw new Exception("Order contains zero or more than two tickets");
|
||||
}
|
||||
}
|
||||
|
||||
var lastleg = 0;
|
||||
var lastticketleg = 0;
|
||||
|
||||
foreach (var leg in parsed.Rporderdetails.Order.Schedulelist.Out.Trainlist.Train) {
|
||||
lastleg = db.InsertWithInt32Identity(new Leg {
|
||||
TripId = tripId,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TrainType = leg.Gattung,
|
||||
TrainNr = int.Parse(leg.Zugnummer),
|
||||
ArrStation = leg.Arr.Name,
|
||||
ArrStationId = int.Parse(leg.Arr.BhfNr),
|
||||
ArrTime = leg.Arr.Date.Replace("00:00:00", leg.Arr.Time),
|
||||
DepStation = leg.Dep.Name,
|
||||
DepStationId = int.Parse(leg.Dep.BhfNr),
|
||||
DepTime = leg.Dep.Date.Replace("00:00:00", leg.Dep.Time),
|
||||
TicketId = ticketId
|
||||
});
|
||||
|
||||
lastticketleg = db.InsertWithInt32Identity(new TicketLeg {
|
||||
TicketId = ticketId,
|
||||
TrainType = leg.Gattung,
|
||||
TrainNr = int.Parse(leg.Zugnummer),
|
||||
ArrStation = leg.Arr.Name,
|
||||
ArrStationId = int.Parse(leg.Arr.BhfNr),
|
||||
ArrTime = leg.Arr.Date.Replace("00:00:00", leg.Arr.Time),
|
||||
DepStation = leg.Dep.Name,
|
||||
DepStationId = int.Parse(leg.Dep.BhfNr),
|
||||
DepTime = leg.Dep.Date.Replace("00:00:00", leg.Dep.Time)
|
||||
});
|
||||
}
|
||||
|
||||
if (parsed.Rporderdetails.Order.Schedulelist.Ret != null) {
|
||||
db.Insert(new Leg {
|
||||
TripId = tripId,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TrainType = "placeholder",
|
||||
TrainNr = lastleg,
|
||||
ArrStation = "_",
|
||||
ArrStationId = 0,
|
||||
ArrTime = "_",
|
||||
DepStation = "_",
|
||||
DepStationId = 0,
|
||||
DepTime = db.Legs.First(p => p.LegId == lastleg).DepTime + "_placeholder"
|
||||
});
|
||||
|
||||
db.Insert(new TicketLeg {
|
||||
TicketId = ticketId2 ?? ticketId,
|
||||
TrainType = "placeholder",
|
||||
TrainNr = lastticketleg,
|
||||
ArrStation = "_",
|
||||
ArrStationId = 0,
|
||||
ArrTime = "_",
|
||||
DepStation = "_",
|
||||
DepStationId = 0,
|
||||
DepTime = db.TicketLegs.First(p => p.TicketLegId == lastticketleg).DepTime + "_placeholder"
|
||||
});
|
||||
|
||||
foreach (var leg in parsed.Rporderdetails.Order.Schedulelist.Ret.Trainlist.Train) {
|
||||
db.InsertWithInt32Identity(new Leg {
|
||||
TripId = tripId,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
|
@ -153,53 +232,24 @@ namespace bahnplan.web.Pages {
|
|||
DepStation = leg.Dep.Name,
|
||||
DepStationId = int.Parse(leg.Dep.BhfNr),
|
||||
DepTime = leg.Dep.Date.Replace("00:00:00", leg.Dep.Time),
|
||||
TicketId = ticketId
|
||||
TicketId = ticketId2 ?? ticketId
|
||||
});
|
||||
|
||||
db.InsertWithInt32Identity(new TicketLeg {
|
||||
TicketId = ticketId,
|
||||
TrainType = leg.Gattung,
|
||||
TrainNr = int.Parse(leg.Zugnummer),
|
||||
ArrStation = leg.Arr.Name,
|
||||
ArrStationId = int.Parse(leg.Arr.BhfNr),
|
||||
ArrTime = leg.Arr.Date.Replace("00:00:00", leg.Arr.Time),
|
||||
DepStation = leg.Dep.Name,
|
||||
DepStationId = int.Parse(leg.Dep.BhfNr),
|
||||
DepTime = leg.Dep.Date.Replace("00:00:00", leg.Dep.Time)
|
||||
});
|
||||
TicketId = ticketId2 ?? ticketId,
|
||||
TrainType = leg.Gattung,
|
||||
TrainNr = int.Parse(leg.Zugnummer),
|
||||
ArrStation = leg.Arr.Name,
|
||||
ArrStationId = int.Parse(leg.Arr.BhfNr),
|
||||
ArrTime = leg.Arr.Date.Replace("00:00:00", leg.Arr.Time),
|
||||
DepStation = leg.Dep.Name,
|
||||
DepStationId = int.Parse(leg.Dep.BhfNr),
|
||||
DepTime = leg.Dep.Date.Replace("00:00:00", leg.Dep.Time)
|
||||
});
|
||||
}
|
||||
|
||||
if (parsed.Rporderdetails.Order.Schedulelist.Ret != null)
|
||||
foreach (var leg in parsed.Rporderdetails.Order.Schedulelist.Ret.Trainlist.Train) {
|
||||
db.InsertWithInt32Identity(new Leg {
|
||||
TripId = tripId,
|
||||
UserId = int.Parse(HttpContext.Session.GetString("uid")),
|
||||
TrainType = leg.Gattung,
|
||||
TrainNr = int.Parse(leg.Zugnummer),
|
||||
ArrStation = leg.Arr.Name,
|
||||
ArrStationId = int.Parse(leg.Arr.BhfNr),
|
||||
ArrTime = leg.Arr.Date.Replace("00:00:00", leg.Arr.Time),
|
||||
DepStation = leg.Dep.Name,
|
||||
DepStationId = int.Parse(leg.Dep.BhfNr),
|
||||
DepTime = leg.Dep.Date.Replace("00:00:00", leg.Dep.Time),
|
||||
TicketId = ticketId2 ?? ticketId
|
||||
});
|
||||
|
||||
db.InsertWithInt32Identity(new TicketLeg {
|
||||
TicketId = ticketId2 ?? ticketId,
|
||||
TrainType = leg.Gattung,
|
||||
TrainNr = int.Parse(leg.Zugnummer),
|
||||
ArrStation = leg.Arr.Name,
|
||||
ArrStationId = int.Parse(leg.Arr.BhfNr),
|
||||
ArrTime = leg.Arr.Date.Replace("00:00:00", leg.Arr.Time),
|
||||
DepStation = leg.Dep.Name,
|
||||
DepStationId = int.Parse(leg.Dep.BhfNr),
|
||||
DepTime = leg.Dep.Date.Replace("00:00:00", leg.Dep.Time)
|
||||
});
|
||||
}
|
||||
|
||||
TripId = tripId;
|
||||
}
|
||||
|
||||
TripId = tripId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue