CreateTestData()
* Gannt icin hazirla
Select islem.*, tip.islemAdi, renk.renkAdi ;
from islemler islem ;
inner Join islemTipleri tip On islem.islemTipi = tip.islemTipi ;
inner Join islemRenkleri renk On islem.islemTipi = renk.islemTipi ;
into Cursor crsGannt ;
nofilter
ShowGannt()
Procedure ShowGannt()
* Horizontal or vertical layout
Local lHorizontal
lHorizontal = ( Messagebox("Horizontal or Vertical?",4+32+4096,"Yes = Horizontal") = 6 )
Public oForm
oForm = Newobject('HTMLViewerForm')
oForm.Show()
Local loDocument
loDocument = oForm.HTMLViewer.Object.Document
If ( m.lHorizontal )
HorizontalLayout(m.loDocument)
Else
VerticalLayout(m.loDocument)
Endif
Endproc
Procedure HorizontalLayout(toDocument)
Local oTable, loTable, oRow, ix
oTable = toDocument.createElement("TABLE")
With oTable
.Border = 0
oTBody = toDocument.createElement("TBODY")
.AppendChild(oTBody)
.cellSpacing = 0
.cellPadding = 0
Endwith
oRow = oTBody.insertRow(-1)
Select Year(dStart) As yr, Month(dStart) As mn From crsGannt ;
union ;
select Year(dEnd), Month(dEnd) From crsGannt ;
into Cursor crsYearMon ;
nofilter
For ix = 1 To Reccount('crsYearMon')+1
oRow.insertCell(-1)
Endfor
loTable = CreateInfoRows(m.toDocument,'crsGannt')
oRow.Cells(0).AppendChild( m.loTable )
Select crsYearMon
Scan
loTable = CreateTableForMonth(m.toDocument,'crsGannt', crsYearMon.yr, crsYearMon.mn)
Select crsYearMon
oRow.Cells(Recno()).AppendChild( m.loTable )
Endscan
toDocument.body.AppendChild(m.oTable)
Endproc
Procedure VerticalLayout(toDocument)
Local oTable, loTable, oRow, ix
oTable = toDocument.createElement("TABLE")
With oTable
.Border = 0
oTBody = toDocument.createElement("TBODY")
.AppendChild(oTBody)
.cellSpacing = 0
.cellPadding = 0
Endwith
Select Year(dStart) As yr, Month(dStart) As mn From crsGannt ;
union ;
select Year(dEnd), Month(dEnd) From crsGannt ;
into Cursor crsYearMon ;
nofilter
For ix = 1 To Reccount('crsYearMon')
oRow = oTBody.insertRow(-1)
oRow.insertCell(-1)
oRow.insertCell(-1)
Endfor
Select crsYearMon
Scan
ldStart = Date(crsYearMon.yr, crsYearMon.mn, 1)
ldEnd = Gomonth(m.ldStart,1)-1
Select * From crsGannt ;
where dStart <= m.ldEnd And dEnd >= m.ldStart ;
order By dStart, dEnd ;
into Cursor crsThisMonth ;
nofilter
loInfoTable = CreateInfoRows(m.toDocument,'crsThisMonth')
loTable = CreateTableForMonth(m.toDocument,'crsThisMonth', crsYearMon.yr, crsYearMon.mn)
Select crsYearMon
oTable.Rows( Recno() - 1 ).Cells( 0 ).AppendChild( loInfoTable )
oTable.Rows( Recno() - 1 ).Cells( 1 ).AppendChild( loTable )
Endscan
toDocument.body.AppendChild(m.oTable)
Endproc
Procedure CreateTestData
Local ix, dStart, dEnd
Create Cursor islemRenkleri (islemTipi i, renkAdi c(10))
Insert Into islemRenkleri (islemTipi, renkAdi) Values (1, 'Red')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (2, 'RoyalBlue')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (3, 'LightGreen')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (4, 'Chocolate')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (5, 'Turquoise')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (6, 'Moccasin')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (7, 'Maroon')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (8, 'DarkKhaki')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (9, 'LightCoral')
Insert Into islemRenkleri (islemTipi, renkAdi) Values (10, 'Blue')
Create Cursor islemTipleri (islemTipi i, islemAdi c(10))
For ix = 1 To 10
Insert Into islemTipleri (islemTipi, islemAdi) Values (m.ix, Textmerge('Islem << m.ix >>'))
Endfor
Create Cursor islemler (ProcessID i, Name c(20), dStart d, dEnd d, islemTipi i)
Insert Into islemler (ProcessID, Name, dStart, dEnd, islemTipi) Values (1, 'Aksiyon 1', Date(2013,2,1), Date(2013,2,2), 1)
Insert Into islemler (ProcessID, Name, dStart, dEnd, islemTipi) Values (2, 'Aksiyon 2', Date(2013,2,2), Date(2013,2,4), 2)
Insert Into islemler (ProcessID, Name, dStart, dEnd, islemTipi) Values (3, 'Aksiyon 3', Date(2013,2,5), Date(2013,2,7), 3)
Insert Into islemler (ProcessID, Name, dStart, dEnd, islemTipi) Values (4, 'Aksiyon 4', Date(2013,2,8), Date(2013,2,10), 4)
Rand(-1)
For ix = 1 To 20
dStart = Date(2013,2,1) + Int(Rand()*90)
dEnd = m.dStart + Int(Rand()*10)
Insert Into islemler ;
(ProcessID, Name, dStart, dEnd, islemTipi) ;
values ;
(m.ix, Textmerge('Aksiyon << m.ix+4 >>'), m.dStart, m.dEnd, Max(Int(Rand()*10),1))
Endfor
Endproc
Procedure CreateTableForMonth(toDocument,tcCursor, tnYear, tnMonth)
Select (m.tcCursor)
Local oTable,oThead,oTFoot,oTBody,oCaption, ix, oRow, oCell, ldStart, ldEnd
ldStart = Date(m.tnYear,m.tnMonth,1)
ldStart = m.ldStart - Day(m.ldStart) + 1 && Ayin ilk gunu
ldEnd = Gomonth(m.ldStart, 1) - Day(Gomonth(m.ldStart, 1)) && Ayin son gunu
oTable = toDocument.createElement("TABLE")
* Insert the created elements into oTable.
With oTable
.Border = 1
.Width = (15 + 1)*Day(m.ldEnd)
.Id = 'my'+Left(Dtoc(m.ldStart,1),6)
.Style.BorderColor = "black"
.Style.BorderWidth = "thin"
.Style.BorderStyle = "solid"
oTBody = toDocument.createElement("TBODY")
oTFoot = .createTFoot()
.AppendChild(oTBody)
.cellSpacing = 0
.cellPadding = 0
Endwith
* caption
CreateTableCaptionForMonth(m.oTable, m.ldStart)
* header
CreateHeaderForMonth(m.oTable, m.ldEnd)
*RowData
CreateDetailForMonth(m.oTable, m.tcCursor, m.ldStart, m.ldEnd)
Return oTable
Endproc
Procedure CreateDetailForMonth(m.oTable, m.tcCursor, m.tdStart, m.tdEnd)
Local oRow, lnDays, ix, nMonth, nStart, nEnd
nMonth = Month(m.tdStart)
lnDays = Day(m.tdEnd)
For ix=1 To Reccount()
CreateDetailRow(m.oTable, m.lnDays)
Endfor
Select (m.tcCursor)
Scan
If dStart <= m.tdEnd And dEnd >= m.tdStart
Do Case
Case Month(dStart) = m.nMonth And Month(dEnd) = m.nMonth
nStart = Day(dStart)
nEnd = Day(dEnd)
Case Month(dStart) = m.nMonth
nStart = Day(dStart)
nEnd = m.lnDays
Case Month(dEnd) = m.nMonth
nStart = 1
nEnd = Day(dEnd)
Otherwise
nStart = 1
nEnd = m.lnDays
Endcase
For ix = m.nStart To m.nEnd
m.oTable.Rows(Recno()).Cells(m.ix-1).Style.backgroundcolor = Trim(renkAdi)
Endfor
Endif
Endscan
Endproc
Procedure CreateDetailRow(toTable, tnColumncount)
Local oRow, oCell, ix
oRow = m.toTable.insertRow(1)
For ix=1 To m.tnColumncount
oCell = m.oRow.insertCell(-1)
oCell.innerHtml = " "
oCell.Style.BorderCollapse = "collapse"
oCell.Style.Border = "1px dashed lightgray"
Endfor
Return m.oRow
Endproc
Procedure CreateTableCaptionForMonth(toTable, tdSampleDate)
oCaption = toTable.createCaption()
oCaption.innerText = Getwordnum("Ocak,Subat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim,Kasim,Aralik",Month(m.tdSampleDate),",")
oCaption.Style.FontSize = "14 pt"
oCaption.Style.Color = "Blue"
oCaption.Style.backgroundcolor = "Yellow"
oCaption.Style.BorderWidth = "thin"
oCaption.Style.BorderStyle = "solid"
oCaption.Align = "top"
Endproc
Procedure CreateHeaderForMonth(toTable, tdEnd)
Local oThead, oRow, oCell, ix
oThead = toTable.createTHead()
oRow = oThead.insertRow(0)
For ix=1 To Day(m.tdEnd)
oCell = oRow.insertCell(-1)
oCell.Style.FontSize = 'x-small'
oCell.innerText = Ltrim(Str(m.ix))
oCell.Width = "15px"
oCell.Align = "center"
Endfor
Return oThead
Endproc
Procedure CreateInfoRows(toDocument,tcCursor)
Select (m.tcCursor)
Local oTable,oThead,oTFoot,oTBody,oCaption, ix, oRow, oCell, ldStart, ldEnd
oTable = toDocument.createElement("TABLE")
* Insert the created elements into oTable.
With oTable
.Border = 1
.Width = 460
.Id = 'myInfo'
.Style.BorderColor = "lightgray"
.Style.BorderWidth = "1px"
.Style.BorderStyle = "solid"
oTBody = toDocument.createElement("TBODY")
.AppendChild(oTBody)
.cellSpacing = 0
.cellPadding = 0
Endwith
* caption
oCaption = oTable.createCaption()
oCaption.innerHtml = " "
oCaption.Style.FontSize = "14 pt"
oCaption.Align = "top"
* header
Local oThead, oRow, oCell, ix
oThead = oTable.createTHead()
oRow = oThead.insertRow(0)
oCell = oRow.insertCell(-1)
oCell.Width = "100px"
oCell.Align = "right"
oCell.innerText = "ProcessID"
oCell = oRow.insertCell(-1)
oCell.Width = "150px"
oCell.Align = "left"
oCell.innerText = "Name"
oCell = oRow.insertCell(-1)
oCell.Width = "100px"
oCell.Align = "left"
oCell.innerText = "Start"
oCell = oRow.insertCell(-1)
oCell.Width = "100px"
oCell.Align = "center"
oCell.innerText = "Duration"
*RowData
Select (m.tcCursor)
Scan
oRow = oTable.insertRow(-1)
oCell = oRow.insertCell(-1)
oCell.Align = "right"
oCell.innerText = Ltrim(Str(ProcessID))
oCell = oRow.insertCell(-1)
oCell.innerText = Name
oCell = oRow.insertCell(-1)
oCell.innerText = Dtoc(dStart)
oCell = oRow.insertCell(-1)
oCell.Align = "center"
oCell.innerText = Ltrim(Str( dEnd - dStart + 1 ))
Endscan
Return oTable
Endproc
Define Class HTMLViewerForm As Form
DataSession = 2
ShowWindow = 2
Height = 500
Width = 800
Caption = "HTML sample"
Add Object HTMLViewer As OleControl With ;
Top = 0, Left = 0, Height = 500, Width = 800, Visible = .T., ;
anchor=15, OleClass = 'Shell.Explorer'
Procedure Init
This.HTMLViewer.navigate2('about:blank')
With This.HTMLViewer.Document
oBody = .createElement('body')
.AppendChild(oBody)
Endwith
Endproc
Procedure HTMLViewer.Refresh
Nodefault
Endproc
Enddefine