unit RESTData; interface {$I Synopse.inc} uses Types, SynCommons, mORMot; type TVpEventRec = packed record Rec: TRect; IconRect: TRect; Event: Pointer; end; TVpEventArray = array of TVpEventRec; TVpAlarmAdvanceType = (atMinutes, atHours, atDays); TVpRepeatType = (rtNone, rtDaily, rtWeekly, rtMonthlyByDay, rtMonthlyByDate, rtYearlyByDay, rtYearlyByDate, rtCustom); TVpContactSort = (csLastFirst, csFirstLast); TSQLRecordWithUserFields = class(TSQLRecord) //TSQLRecordWithUserFields = class(TSQLRecordTimed) protected FUserField0: string; FUserField1: string; FUserField2: string; FUserField3: string; FUserField4: string; FUserField5: string; FUserField6: string; FUserField7: string; FUserField8: string; FUserField9: string; published property UserField0: string read FUserField0 write FUserField0; property UserField1: string read FUserField1 write FUserField1; property UserField2: string read FUserField2 write FUserField2; property UserField3: string read FUserField3 write FUserField3; property UserField4: string read FUserField4 write FUserField4; property UserField5: string read FUserField5 write FUserField5; property UserField6: string read FUserField6 write FUserField6; property UserField7: string read FUserField7 write FUserField7; property UserField8: string read FUserField8 write FUserField8; property UserField9: string read FUserField9 write FUserField9; end; TSQLVpResource = class(TSQLRecordWithUserFields) protected fResourceID: TID; fDescription: string; fNotes: string; fImageIndex: integer; fResourceActive: boolean; public class procedure InitializeTable(Server: TSQLRestServer; const FieldName: RawUTF8; Options: TSQLInitializeTableOptions); override; published property ResourceID: TID read fResourceID write fResourceID; property Description: string read fDescription write fDescription; property Notes: string read fNotes write fNotes; property ImageIndex: integer read fImageIndex write fImageIndex; property ResourceActive: boolean read fResourceActive write fResourceActive; end; TSQLRecordWithUserFieldsAndID = class(TSQLRecordWithUserFields) protected fResourceID:integer; published property RecordID: TID read fID; property ResourceID: integer read fResourceID write fResourceID; end; TSQLVpEvent = class(TSQLRecordWithUserFieldsAndID) protected FStartTime: TDateTime; FEndTime: TDateTime; FPrivateEvent: boolean; FAlarmSet: boolean; FDingPath: string; FAllDayEvent: boolean; FCategory: integer; FAlarmAdvance: integer; FAlertDisplayed: boolean; FAlarmAdvanceType: TVpAlarmAdvanceType; FLocation: string; FNotes: string; FDescription: string; FSnoozeTime: TDateTime; FRepeatCode: TVpRepeatType; FRepeatRangeEnd: TDateTime; FCustomInterval: integer; published property StartTime: TDateTime read FStartTime write FStartTime; property EndTime: TDateTime read FEndTime write FEndTime; property Description: string read FDescription write FDescription; property Location: string read FLocation write FLocation; property Notes: string read FNotes write FNotes; property Category: integer read FCategory write FCategory; property DingPath: string read FDingPath write FDingPath; property AllDayEvent: boolean read FAllDayEvent write FAllDayEvent; property AlarmSet: boolean read FAlarmSet write FAlarmSet; property AlarmAdvance: integer read FAlarmAdvance write FAlarmAdvance; property AlarmAdvanceType: TVpAlarmAdvanceType read FAlarmAdvanceType write FAlarmAdvanceType; property SnoozeTime: TDateTime read FSnoozeTime write FSnoozeTime; property RepeatCode: TVpRepeatType read FRepeatCode write FRepeatCode; property RepeatRangeEnd: TDateTime read FRepeatRangeEnd write FRepeatRangeEnd; property CustomInterval: integer read FCustomInterval write FCustomInterval; end; TVpPhoneType = (ptAssistant, ptCallback, ptCar, ptCompany, ptHome, ptHomeFax, ptISDN, ptMobile, ptOther, ptOtherFax, ptPager, ptPrimary, ptRadio, ptTelex, ptTTYTDD, ptWork, ptWorkFax); TVpCategoryType = (ctBusiness, ctClients, ctFamily, ctOther, ctPersonal); TSQLVpContact = class(TSQLRecordWithUserFieldsAndID) protected fFirstName:string; fLastName:string; fBirthdate:TDateTime; fAnniversary:TDateTime; fTitle:string; fCompany:string; fJob_Position:string; fEMail:string; fAddress:string; fCity:string; fState:string; fZip:string; fCountry:string; fNotes:string; fPhone1:string; fPhone2:string; fPhone3:string; fPhone4:string; fPhone5:string; fPhoneType1:TVpPhoneType; fPhoneType2:TVpPhoneType; fPhoneType3:TVpPhoneType; fPhoneType4:TVpPhoneType; fPhoneType5:TVpPhoneType; fCategory:TVpCategoryType; fCustom1:string; fCustom2:string; fCustom3:string; fCustom4:string; published property FirstName:string read fFirstName write fFirstName; property LastName:string read fLastName write fLastName; property Birthdate:TDateTime read fBirthdate write fBirthdate; property Anniversary:TDateTime read fAnniversary write fAnniversary; property Title:string read fTitle write fTitle; property Company:string read fCompany write fCompany; property Job_Position:string read fJob_Position write fJob_Position; property EMail:string read fEMail write fEMail; property Address:string read fAddress write fAddress; property City:string read fCity write fCity; property State:string read fState write fState; property Zip:string read fZip write fZip; property Country:string read fCountry write fCountry; property Notes:string read fNotes write fNotes; property Phone1:string read fPhone1 write fPhone1; property Phone2:string read fPhone2 write fPhone2; property Phone3:string read fPhone3 write fPhone3; property Phone4:string read fPhone4 write fPhone4; property Phone5:string read fPhone5 write fPhone5; property PhoneType1:TVpPhoneType read fPhoneType1 write fPhoneType1; property PhoneType2:TVpPhoneType read fPhoneType2 write fPhoneType2; property PhoneType3:TVpPhoneType read fPhoneType3 write fPhoneType3; property PhoneType4:TVpPhoneType read fPhoneType4 write fPhoneType4; property PhoneType5:TVpPhoneType read fPhoneType5 write fPhoneType5; property Category:TVpCategoryType read fCategory write fCategory; property Custom1:string read fCustom1 write fCustom1; property Custom2:string read fCustom2 write fCustom2; property Custom3:string read fCustom3 write fCustom3; property Custom4:string read fCustom4 write fCustom4; end; TSQLVpTask = class(TSQLRecordWithUserFieldsAndID) protected fDescription:String; fDetails:String; fComplete:Boolean; fDueDate:TDateTime; fCreatedOn:TDateTime; fCompletedOn:TDateTime; fPriority:Integer; fCategory:Integer; published property Description:String read fDescription write fDescription; property Details:String read fDetails write fDetails; property Complete:Boolean read fComplete write fComplete; property DueDate:TDateTime read fDueDate write fDueDate; property CreatedOn:TDateTime read fCreatedOn write fCreatedOn; property CompletedOn:TDateTime read fCompletedOn write fCompletedOn; property Priority:Integer read fPriority write fPriority; property Category:Integer read fCategory write fCategory; end; function DataModel: TSQLModel; const {$ifdef Windows} HTTP_PORT = '888'; {$else} HTTP_PORT = '8888'; {$endif} implementation function DataModel: TSQLModel; begin result := TSQLModel.Create([ //{$ifdef USEAUTHENTICATION} TSQLAuthGroup, TSQLAuthUser, //{$endif} TSQLVpResource, TSQLVpEvent, TSQLVpContact, TSQLVpTask ]); end; class procedure TSQLVpResource.InitializeTable(Server: TSQLRestServer; const FieldName: RawUTF8; Options: TSQLInitializeTableOptions); var LocalResource:TSQLVpResource; aNewID:TID; begin inherited InitializeTable(Server,FieldName,Options); if FieldName='' then begin LocalResource:=TSQLVpResource.Create; try LocalResource.Description := 'MyFirstResource'; LocalResource.Notes := 'This is an automatically created resource only when the database was non existent'; LocalResource.ResourceActive := True; aNewID:=Server.Add(LocalResource,true); // do we have a new resource ? if aNewID>0 then begin LocalResource.ResourceID:=aNewID; Server.Update(LocalResource,'ResourceID',true); end; finally LocalResource.Free; end; end; end; initialization {$ifndef ISDELPHI2010} {$ifndef HASINTERFACERTTI} // circumvent a old FPC bug TTextWriter.RegisterCustomJSONSerializerFromTextSimpleType(TypeInfo(TVpAlarmAdvanceType)); TTextWriter.RegisterCustomJSONSerializerFromTextSimpleType(TypeInfo(TVpRepeatType)); TTextWriter.RegisterCustomJSONSerializerFromTextSimpleType(TypeInfo(TVpContactSort)); TTextWriter.RegisterCustomJSONSerializerFromTextSimpleType(TypeInfo(TVpPhoneType)); TTextWriter.RegisterCustomJSONSerializerFromTextSimpleType(TypeInfo(TVpCategoryType)); {$endif} {$endif} end.