front end logic for saving extra fields.

This commit is contained in:
DESKTOP-GENO133\IvanPlex 2024-02-12 17:32:08 -07:00
parent dc3608524a
commit 33aeaf9825
13 changed files with 100 additions and 27 deletions

View File

@ -73,6 +73,10 @@ namespace CarCareTracker.Controllers
public IActionResult GetExtraFieldsModal(int importMode = 0) public IActionResult GetExtraFieldsModal(int importMode = 0)
{ {
var recordExtraFields = _extraFieldDataAccess.GetExtraFieldsById(importMode); var recordExtraFields = _extraFieldDataAccess.GetExtraFieldsById(importMode);
if (recordExtraFields.Id != importMode)
{
recordExtraFields.Id = importMode;
}
return PartialView("_ExtraFields", recordExtraFields); return PartialView("_ExtraFields", recordExtraFields);
} }
public IActionResult UpdateExtraFields(RecordExtraField record) public IActionResult UpdateExtraFields(RecordExtraField record)

View File

@ -36,6 +36,7 @@ namespace CarCareTracker.Controllers
private readonly IReminderHelper _reminderHelper; private readonly IReminderHelper _reminderHelper;
private readonly IReportHelper _reportHelper; private readonly IReportHelper _reportHelper;
private readonly IUserLogic _userLogic; private readonly IUserLogic _userLogic;
private readonly IExtraFieldDataAccess _extraFieldDataAccess;
public VehicleController(ILogger<VehicleController> logger, public VehicleController(ILogger<VehicleController> logger,
IFileHelper fileHelper, IFileHelper fileHelper,
@ -54,6 +55,7 @@ namespace CarCareTracker.Controllers
IPlanRecordDataAccess planRecordDataAccess, IPlanRecordDataAccess planRecordDataAccess,
IPlanRecordTemplateDataAccess planRecordTemplateDataAccess, IPlanRecordTemplateDataAccess planRecordTemplateDataAccess,
IOdometerRecordDataAccess odometerRecordDataAccess, IOdometerRecordDataAccess odometerRecordDataAccess,
IExtraFieldDataAccess extraFieldDataAccess,
IUserLogic userLogic, IUserLogic userLogic,
IWebHostEnvironment webEnv, IWebHostEnvironment webEnv,
IConfigHelper config) IConfigHelper config)
@ -75,6 +77,7 @@ namespace CarCareTracker.Controllers
_planRecordDataAccess = planRecordDataAccess; _planRecordDataAccess = planRecordDataAccess;
_planRecordTemplateDataAccess = planRecordTemplateDataAccess; _planRecordTemplateDataAccess = planRecordTemplateDataAccess;
_odometerRecordDataAccess = odometerRecordDataAccess; _odometerRecordDataAccess = odometerRecordDataAccess;
_extraFieldDataAccess = extraFieldDataAccess;
_userLogic = userLogic; _userLogic = userLogic;
_webEnv = webEnv; _webEnv = webEnv;
_config = config; _config = config;
@ -589,7 +592,7 @@ namespace CarCareTracker.Controllers
var vehicleData = _dataAccess.GetVehicleById(vehicleId); var vehicleData = _dataAccess.GetVehicleById(vehicleId);
var vehicleIsElectric = vehicleData.IsElectric; var vehicleIsElectric = vehicleData.IsElectric;
var vehicleUseHours = vehicleData.UseHours; var vehicleUseHours = vehicleData.UseHours;
return PartialView("_GasModal", new GasRecordInputContainer() { UseKwh = vehicleIsElectric, UseHours = vehicleUseHours, GasRecord = new GasRecordInput() }); return PartialView("_GasModal", new GasRecordInputContainer() { UseKwh = vehicleIsElectric, UseHours = vehicleUseHours, GasRecord = new GasRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.GasRecord).ExtraFields } });
} }
[HttpGet] [HttpGet]
public IActionResult GetGasRecordForEditById(int gasRecordId) public IActionResult GetGasRecordForEditById(int gasRecordId)
@ -607,7 +610,8 @@ namespace CarCareTracker.Controllers
IsFillToFull = result.IsFillToFull, IsFillToFull = result.IsFillToFull,
MissedFuelUp = result.MissedFuelUp, MissedFuelUp = result.MissedFuelUp,
Notes = result.Notes, Notes = result.Notes,
Tags = result.Tags Tags = result.Tags,
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.GasRecord).ExtraFields)
}; };
var vehicleData = _dataAccess.GetVehicleById(convertedResult.VehicleId); var vehicleData = _dataAccess.GetVehicleById(convertedResult.VehicleId);
var vehicleIsElectric = vehicleData.IsElectric; var vehicleIsElectric = vehicleData.IsElectric;
@ -678,7 +682,7 @@ namespace CarCareTracker.Controllers
[HttpGet] [HttpGet]
public IActionResult GetAddServiceRecordPartialView() public IActionResult GetAddServiceRecordPartialView()
{ {
return PartialView("_ServiceRecordModal", new ServiceRecordInput()); return PartialView("_ServiceRecordModal", new ServiceRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.ServiceRecord).ExtraFields });
} }
[HttpGet] [HttpGet]
public IActionResult GetServiceRecordForEditById(int serviceRecordId) public IActionResult GetServiceRecordForEditById(int serviceRecordId)
@ -695,7 +699,8 @@ namespace CarCareTracker.Controllers
Notes = result.Notes, Notes = result.Notes,
VehicleId = result.VehicleId, VehicleId = result.VehicleId,
Files = result.Files, Files = result.Files,
Tags = result.Tags Tags = result.Tags,
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.ServiceRecord).ExtraFields)
}; };
return PartialView("_ServiceRecordModal", convertedResult); return PartialView("_ServiceRecordModal", convertedResult);
} }
@ -748,7 +753,7 @@ namespace CarCareTracker.Controllers
[HttpGet] [HttpGet]
public IActionResult GetAddCollisionRecordPartialView() public IActionResult GetAddCollisionRecordPartialView()
{ {
return PartialView("_CollisionRecordModal", new CollisionRecordInput()); return PartialView("_CollisionRecordModal", new CollisionRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.RepairRecord).ExtraFields });
} }
[HttpGet] [HttpGet]
public IActionResult GetCollisionRecordForEditById(int collisionRecordId) public IActionResult GetCollisionRecordForEditById(int collisionRecordId)
@ -765,7 +770,8 @@ namespace CarCareTracker.Controllers
Notes = result.Notes, Notes = result.Notes,
VehicleId = result.VehicleId, VehicleId = result.VehicleId,
Files = result.Files, Files = result.Files,
Tags = result.Tags Tags = result.Tags,
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.RepairRecord).ExtraFields)
}; };
return PartialView("_CollisionRecordModal", convertedResult); return PartialView("_CollisionRecordModal", convertedResult);
} }
@ -822,7 +828,8 @@ namespace CarCareTracker.Controllers
RecurringInterval = recurringFee.RecurringInterval, RecurringInterval = recurringFee.RecurringInterval,
CustomMonthInterval = recurringFee.CustomMonthInterval, CustomMonthInterval = recurringFee.CustomMonthInterval,
Files = recurringFee.Files, Files = recurringFee.Files,
Tags = recurringFee.Tags Tags = recurringFee.Tags,
ExtraFields = recurringFee.ExtraFields
}; };
_taxRecordDataAccess.SaveTaxRecordToVehicle(recurringFee); _taxRecordDataAccess.SaveTaxRecordToVehicle(recurringFee);
_taxRecordDataAccess.SaveTaxRecordToVehicle(newRecurringFee); _taxRecordDataAccess.SaveTaxRecordToVehicle(newRecurringFee);
@ -841,7 +848,7 @@ namespace CarCareTracker.Controllers
[HttpGet] [HttpGet]
public IActionResult GetAddTaxRecordPartialView() public IActionResult GetAddTaxRecordPartialView()
{ {
return PartialView("_TaxRecordModal", new TaxRecordInput()); return PartialView("_TaxRecordModal", new TaxRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.TaxRecord).ExtraFields });
} }
[HttpGet] [HttpGet]
public IActionResult GetTaxRecordForEditById(int taxRecordId) public IActionResult GetTaxRecordForEditById(int taxRecordId)
@ -860,7 +867,8 @@ namespace CarCareTracker.Controllers
RecurringInterval = result.RecurringInterval, RecurringInterval = result.RecurringInterval,
CustomMonthInterval = result.CustomMonthInterval, CustomMonthInterval = result.CustomMonthInterval,
Files = result.Files, Files = result.Files,
Tags = result.Tags Tags = result.Tags,
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.TaxRecord).ExtraFields)
}; };
return PartialView("_TaxRecordModal", convertedResult); return PartialView("_TaxRecordModal", convertedResult);
} }
@ -1417,7 +1425,7 @@ namespace CarCareTracker.Controllers
[HttpGet] [HttpGet]
public IActionResult GetAddUpgradeRecordPartialView() public IActionResult GetAddUpgradeRecordPartialView()
{ {
return PartialView("_UpgradeRecordModal", new UpgradeRecordInput()); return PartialView("_UpgradeRecordModal", new UpgradeRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.UpgradeRecord).ExtraFields });
} }
[HttpGet] [HttpGet]
public IActionResult GetUpgradeRecordForEditById(int upgradeRecordId) public IActionResult GetUpgradeRecordForEditById(int upgradeRecordId)
@ -1434,7 +1442,8 @@ namespace CarCareTracker.Controllers
Notes = result.Notes, Notes = result.Notes,
VehicleId = result.VehicleId, VehicleId = result.VehicleId,
Files = result.Files, Files = result.Files,
Tags = result.Tags Tags = result.Tags,
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.UpgradeRecord).ExtraFields)
}; };
return PartialView("_UpgradeRecordModal", convertedResult); return PartialView("_UpgradeRecordModal", convertedResult);
} }
@ -1569,7 +1578,7 @@ namespace CarCareTracker.Controllers
[HttpGet] [HttpGet]
public IActionResult GetAddSupplyRecordPartialView() public IActionResult GetAddSupplyRecordPartialView()
{ {
return PartialView("_SupplyRecordModal", new SupplyRecordInput()); return PartialView("_SupplyRecordModal", new SupplyRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.SupplyRecord).ExtraFields });
} }
[HttpGet] [HttpGet]
public IActionResult GetSupplyRecordForEditById(int supplyRecordId) public IActionResult GetSupplyRecordForEditById(int supplyRecordId)
@ -1588,7 +1597,8 @@ namespace CarCareTracker.Controllers
Notes = result.Notes, Notes = result.Notes,
VehicleId = result.VehicleId, VehicleId = result.VehicleId,
Files = result.Files, Files = result.Files,
Tags = result.Tags Tags = result.Tags,
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.SupplyRecord).ExtraFields)
}; };
return PartialView("_SupplyRecordModal", convertedResult); return PartialView("_SupplyRecordModal", convertedResult);
} }
@ -1682,7 +1692,7 @@ namespace CarCareTracker.Controllers
[HttpGet] [HttpGet]
public IActionResult GetAddPlanRecordPartialView() public IActionResult GetAddPlanRecordPartialView()
{ {
return PartialView("_PlanRecordModal", new PlanRecordInput()); return PartialView("_PlanRecordModal", new PlanRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.PlanRecord).ExtraFields });
} }
[HttpPost] [HttpPost]
public IActionResult UpdatePlanRecordProgress(int planRecordId, PlanProgress planProgress, int odometer = 0) public IActionResult UpdatePlanRecordProgress(int planRecordId, PlanProgress planProgress, int odometer = 0)
@ -1766,7 +1776,8 @@ namespace CarCareTracker.Controllers
Cost = result.Cost, Cost = result.Cost,
Notes = result.Notes, Notes = result.Notes,
VehicleId = result.VehicleId, VehicleId = result.VehicleId,
Files = result.Files Files = result.Files,
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.PlanRecord).ExtraFields)
}; };
return PartialView("_PlanRecordModal", convertedResult); return PartialView("_PlanRecordModal", convertedResult);
} }
@ -1805,7 +1816,7 @@ namespace CarCareTracker.Controllers
[HttpGet] [HttpGet]
public IActionResult GetAddOdometerRecordPartialView() public IActionResult GetAddOdometerRecordPartialView()
{ {
return PartialView("_OdometerRecordModal", new OdometerRecordInput()); return PartialView("_OdometerRecordModal", new OdometerRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.OdometerRecord).ExtraFields });
} }
[HttpGet] [HttpGet]
public IActionResult GetOdometerRecordForEditById(int odometerRecordId) public IActionResult GetOdometerRecordForEditById(int odometerRecordId)
@ -1820,7 +1831,8 @@ namespace CarCareTracker.Controllers
Notes = result.Notes, Notes = result.Notes,
VehicleId = result.VehicleId, VehicleId = result.VehicleId,
Files = result.Files, Files = result.Files,
Tags = result.Tags Tags = result.Tags,
ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.OdometerRecord).ExtraFields)
}; };
return PartialView("_OdometerRecordModal", convertedResult); return PartialView("_OdometerRecordModal", convertedResult);
} }

View File

@ -1,5 +1,6 @@
using CarCareTracker.Models; using CarCareTracker.Models;
using System.Globalization; using System.Globalization;
using System.Linq;
namespace CarCareTracker.Helper namespace CarCareTracker.Helper
{ {
@ -163,6 +164,19 @@ namespace CarCareTracker.Helper
}; };
} }
public static List<ExtraField> AddExtraFields(List<ExtraField> recordExtraFields, List<ExtraField> templateExtraFields)
{
var fieldNames = recordExtraFields.Select(x => x.Name);
foreach(ExtraField field in templateExtraFields)
{
if (!fieldNames.Contains(field.Name))
{
recordExtraFields.Add(field);
}
}
return recordExtraFields;
}
public static string GetFuelEconomyUnit(bool useKwh, bool useHours, bool useMPG, bool useUKMPG) public static string GetFuelEconomyUnit(bool useKwh, bool useHours, bool useMPG, bool useUKMPG)
{ {
string fuelEconomyUnit; string fuelEconomyUnit;

View File

@ -1,10 +1,13 @@
namespace CarCareTracker.Models using LiteDB;
namespace CarCareTracker.Models
{ {
public class RecordExtraField public class RecordExtraField
{ {
/// <summary> /// <summary>
/// Corresponds to int value of ImportMode enum /// Corresponds to int value of ImportMode enum
/// </summary> /// </summary>
[BsonId(false)]
public int Id { get; set; } public int Id { get; set; }
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>(); public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
} }

View File

@ -183,7 +183,7 @@
<span class="lead">@translator.Translate(userLanguage, "Manage Extra Fields")</span> <span class="lead">@translator.Translate(userLanguage, "Manage Extra Fields")</span>
<div class="row"> <div class="row">
<div class="col-12 d-grid"> <div class="col-12 d-grid">
<button onclick="showExtraFieldModal()" class="btn btn-primary btn-md">@translator.Translate(userLanguage, "Manage")</button> <button onclick="showExtraFieldModal()" class="btn btn-primary btn-md">@translator.Translate(userLanguage, "Add/Remove Extra Fields")</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -88,6 +88,10 @@ function getAndValidateCollisionRecordValues() {
var addReminderRecord = $("#addReminderCheck").is(":checked"); var addReminderRecord = $("#addReminderCheck").is(":checked");
//validation //validation
var hasError = false; var hasError = false;
var extraFields = getAndValidateExtraFields();
if (extraFields.hasError) {
hasError = true;
}
if (collisionDate.trim() == '') { //eliminates whitespace. if (collisionDate.trim() == '') { //eliminates whitespace.
hasError = true; hasError = true;
$("#collisionRecordDate").addClass("is-invalid"); $("#collisionRecordDate").addClass("is-invalid");
@ -124,6 +128,7 @@ function getAndValidateCollisionRecordValues() {
files: uploadedFiles, files: uploadedFiles,
supplies: selectedSupplies, supplies: selectedSupplies,
tags: collisionTags, tags: collisionTags,
addReminderRecord: addReminderRecord addReminderRecord: addReminderRecord,
extraFields: extraFields.extraFields
} }
} }

View File

@ -87,6 +87,10 @@ function getAndValidateGasRecordValues() {
var gasRecordId = getGasRecordModelData().id; var gasRecordId = getGasRecordModelData().id;
//validation //validation
var hasError = false; var hasError = false;
var extraFields = getAndValidateExtraFields();
if (extraFields.hasError) {
hasError = true;
}
if (gasDate.trim() == '') { //eliminates whitespace. if (gasDate.trim() == '') { //eliminates whitespace.
hasError = true; hasError = true;
$("#gasRecordDate").addClass("is-invalid"); $("#gasRecordDate").addClass("is-invalid");
@ -134,7 +138,8 @@ function getAndValidateGasRecordValues() {
tags: gasTags, tags: gasTags,
isFillToFull: gasIsFillToFull, isFillToFull: gasIsFillToFull,
missedFuelUp: gasIsMissed, missedFuelUp: gasIsMissed,
notes: gasNotes notes: gasNotes,
extraFields: extraFields.extraFields
} }
} }

View File

@ -85,6 +85,10 @@ function getAndValidateOdometerRecordValues() {
var odometerRecordId = getOdometerRecordModelData().id; var odometerRecordId = getOdometerRecordModelData().id;
//validation //validation
var hasError = false; var hasError = false;
var extraFields = getAndValidateExtraFields();
if (extraFields.hasError) {
hasError = true;
}
if (serviceDate.trim() == '') { //eliminates whitespace. if (serviceDate.trim() == '') { //eliminates whitespace.
hasError = true; hasError = true;
$("#odometerRecordDate").addClass("is-invalid"); $("#odometerRecordDate").addClass("is-invalid");
@ -105,6 +109,7 @@ function getAndValidateOdometerRecordValues() {
mileage: serviceMileage, mileage: serviceMileage,
notes: serviceNotes, notes: serviceNotes,
tags: serviceTags, tags: serviceTags,
files: uploadedFiles files: uploadedFiles,
extraFields: extraFields.extraFields
} }
} }

View File

@ -159,6 +159,10 @@ function getAndValidatePlanRecordValues() {
var planRecordId = getPlanRecordModelData().id; var planRecordId = getPlanRecordModelData().id;
//validation //validation
var hasError = false; var hasError = false;
var extraFields = getAndValidateExtraFields();
if (extraFields.hasError) {
hasError = true;
}
if (planDescription.trim() == '') { if (planDescription.trim() == '') {
hasError = true; hasError = true;
$("#planRecordDescription").addClass("is-invalid"); $("#planRecordDescription").addClass("is-invalid");
@ -183,7 +187,8 @@ function getAndValidatePlanRecordValues() {
supplies: selectedSupplies, supplies: selectedSupplies,
priority: planPriority, priority: planPriority,
progress: planProgress, progress: planProgress,
importMode: planType importMode: planType,
extraFields: extraFields.extraFields
} }
} }
//drag and drop stuff. //drag and drop stuff.

View File

@ -88,6 +88,10 @@ function getAndValidateServiceRecordValues() {
var addReminderRecord = $("#addReminderCheck").is(":checked"); var addReminderRecord = $("#addReminderCheck").is(":checked");
//validation //validation
var hasError = false; var hasError = false;
var extraFields = getAndValidateExtraFields();
if (extraFields.hasError) {
hasError = true;
}
if (serviceDate.trim() == '') { //eliminates whitespace. if (serviceDate.trim() == '') { //eliminates whitespace.
hasError = true; hasError = true;
$("#serviceRecordDate").addClass("is-invalid"); $("#serviceRecordDate").addClass("is-invalid");
@ -124,6 +128,7 @@ function getAndValidateServiceRecordValues() {
files: uploadedFiles, files: uploadedFiles,
supplies: selectedSupplies, supplies: selectedSupplies,
tags: serviceTags, tags: serviceTags,
addReminderRecord: addReminderRecord addReminderRecord: addReminderRecord,
extraFields: extraFields.extraFields
} }
} }

View File

@ -89,6 +89,10 @@ function getAndValidateSupplyRecordValues() {
var supplyRecordId = getSupplyRecordModelData().id; var supplyRecordId = getSupplyRecordModelData().id;
//validation //validation
var hasError = false; var hasError = false;
var extraFields = getAndValidateExtraFields();
if (extraFields.hasError) {
hasError = true;
}
if (supplyDate.trim() == '') { //eliminates whitespace. if (supplyDate.trim() == '') { //eliminates whitespace.
hasError = true; hasError = true;
$("#supplyRecordDate").addClass("is-invalid"); $("#supplyRecordDate").addClass("is-invalid");
@ -125,6 +129,7 @@ function getAndValidateSupplyRecordValues() {
notes: supplyNotes, notes: supplyNotes,
quantity: supplyQuantity, quantity: supplyQuantity,
files: uploadedFiles, files: uploadedFiles,
tags: supplyTags tags: supplyTags,
extraFields: extraFields.extraFields
} }
} }

View File

@ -126,6 +126,10 @@ function getAndValidateTaxRecordValues() {
var addReminderRecord = $("#addReminderCheck").is(":checked"); var addReminderRecord = $("#addReminderCheck").is(":checked");
//validation //validation
var hasError = false; var hasError = false;
var extraFields = getAndValidateExtraFields();
if (extraFields.hasError) {
hasError = true;
}
if (taxDate.trim() == '') { //eliminates whitespace. if (taxDate.trim() == '') { //eliminates whitespace.
hasError = true; hasError = true;
$("#taxRecordDate").addClass("is-invalid"); $("#taxRecordDate").addClass("is-invalid");
@ -157,6 +161,7 @@ function getAndValidateTaxRecordValues() {
customMonthInterval: customMonthInterval, customMonthInterval: customMonthInterval,
tags: taxTags, tags: taxTags,
files: uploadedFiles, files: uploadedFiles,
addReminderRecord: addReminderRecord addReminderRecord: addReminderRecord,
extraFields: extraFields.extraFields
} }
} }

View File

@ -88,6 +88,10 @@ function getAndValidateUpgradeRecordValues() {
var addReminderRecord = $("#addReminderCheck").is(":checked"); var addReminderRecord = $("#addReminderCheck").is(":checked");
//validation //validation
var hasError = false; var hasError = false;
var extraFields = getAndValidateExtraFields();
if (extraFields.hasError) {
hasError = true;
}
if (upgradeDate.trim() == '') { //eliminates whitespace. if (upgradeDate.trim() == '') { //eliminates whitespace.
hasError = true; hasError = true;
$("#upgradeRecordDate").addClass("is-invalid"); $("#upgradeRecordDate").addClass("is-invalid");
@ -124,6 +128,7 @@ function getAndValidateUpgradeRecordValues() {
files: uploadedFiles, files: uploadedFiles,
supplies: selectedSupplies, supplies: selectedSupplies,
tags: upgradeTags, tags: upgradeTags,
addReminderRecord: addReminderRecord addReminderRecord: addReminderRecord,
extraFields: extraFields.extraFields
} }
} }