///<summary></summary> public static void Update(MedLab medLab){ if(RemotingClient.RemotingRole==RemotingRole.ClientWeb){ Meth.GetVoid(MethodBase.GetCurrentMethod(),medLab); return; } Crud.MedLabCrud.Update(medLab); }
private static DataTable getTable_MedLabResults(MedLab medLab) { DataTable retval=new DataTable(); retval.Columns.Add(new DataColumn("obsIDValue")); retval.Columns.Add(new DataColumn("obsAbnormalFlag")); retval.Columns.Add(new DataColumn("obsUnits")); retval.Columns.Add(new DataColumn("obsRefRange")); retval.Columns.Add(new DataColumn("facilityID")); List<MedLab> listMedLabs=MedLabs.GetForPatAndSpecimen(medLab.PatNum,medLab.SpecimenID,medLab.SpecimenIDFiller);//should always be at least one MedLab MedLabs.GetListFacNums(listMedLabs,out _listResults);//refreshes and sorts the classwide _listResults variable string obsDescriptPrev=""; for(int i=0;i<_listResults.Count;i++) { //LabCorp requested that these non-performance results not be displayed on the report if((_listResults[i].ResultStatus==ResultStatus.F || _listResults[i].ResultStatus==ResultStatus.X) && _listResults[i].ObsValue=="" && _listResults[i].Note=="") { continue; } string obsDescript=""; MedLab medLabCur=MedLabs.GetOne(_listResults[i].MedLabNum); if(i==0 || _listResults[i].MedLabNum!=_listResults[i-1].MedLabNum) { if(medLabCur.ActionCode!=ResultAction.G) { if(obsDescriptPrev==medLabCur.ObsTestDescript) { obsDescript="."; } else { obsDescript=medLabCur.ObsTestDescript; obsDescriptPrev=obsDescript; } } } DataRow row=retval.NewRow(); string spaces=" "; string spaces2=" "; string obsVal=""; int padR=38; string newLine=""; if(obsDescript!="") { if(obsDescript==_listResults[i].ObsText) { spaces=""; spaces2=" "; padR=40; } else { obsVal+=obsDescript+"\r\n"; newLine+="\r\n"; } } if(_listResults[i].ObsValue=="Test Not Performed") { obsVal+=spaces+_listResults[i].ObsText; } else if(_listResults[i].ObsText=="." || _listResults[i].ObsValue.Contains(":") || _listResults[i].ObsValue.Length>20 || medLabCur.ActionCode==ResultAction.G) { obsVal+=spaces+_listResults[i].ObsText+"\r\n"+spaces2+_listResults[i].ObsValue.Replace("\r\n","\r\n"+spaces2); newLine+="\r\n"; } else { obsVal+=spaces+_listResults[i].ObsText.PadRight(padR,' ')+_listResults[i].ObsValue; } if(_listResults[i].Note!="") { obsVal+="\r\n"+spaces2+_listResults[i].Note.Replace("\r\n","\r\n"+spaces2); } row["obsIDValue"]=obsVal; row["obsAbnormalFlag"]=newLine+MedLabResults.GetAbnormalFlagDescript(_listResults[i].AbnormalFlag); row["obsUnits"]=newLine+_listResults[i].ObsUnits; row["obsRefRange"]=newLine+_listResults[i].ReferenceRange; row["facilityID"]=newLine+_listResults[i].FacilityID; retval.Rows.Add(row); } return retval; }
///<summary></summary> public static long Insert(MedLab medLab){ if(RemotingClient.RemotingRole==RemotingRole.ClientWeb){ medLab.MedLabNum=Meth.GetLong(MethodBase.GetCurrentMethod(),medLab); return medLab.MedLabNum; } return Crud.MedLabCrud.Insert(medLab); }
///<summary>Just before printing or displaying the final sheet output, the heights and y positions of various fields are adjusted according to their growth behavior. This also now gets run every time a user changes the value of a textbox while filling out a sheet.</summary> public static void CalculateHeights(Sheet sheet,Graphics g,Statement stmt=null,bool isPrinting=false,int topMargin=40,int bottomMargin=60,MedLab medLab=null){ //Sheet sheetCopy=sheet.Clone(); int calcH; Font font; FontStyle fontstyle; foreach(SheetField field in sheet.SheetFields) { if(field.FieldType==SheetFieldType.Image || field.FieldType==SheetFieldType.PatImage) { #region Get the path for the image string filePathAndName=""; switch(field.FieldType) { case SheetFieldType.Image: filePathAndName=ODFileUtils.CombinePaths(SheetUtil.GetImagePath(),field.FieldName); break; case SheetFieldType.PatImage: if(field.FieldValue=="") { //There is no document object to use for display, but there may be a baked in image and that situation is dealt with below. filePathAndName=""; break; } Document patDoc=Documents.GetByNum(PIn.Long(field.FieldValue)); List<string> paths=Documents.GetPaths(new List<long> { patDoc.DocNum },ImageStore.GetPreferredAtoZpath()); if(paths.Count < 1) {//No path was found so we cannot draw the image. continue; } filePathAndName=paths[0]; break; default: //not an image field continue; } #endregion if(field.FieldName=="Patient Info.gif" || File.Exists(filePathAndName)) { continue; } else {//img doesn't exist or we do not have access to it. field.Height=0;//Set height to zero so that it will not cause extra pages to print. } } if(field.GrowthBehavior==GrowthBehaviorEnum.None){//Images don't have growth behavior, so images are excluded below this point. continue; } fontstyle=FontStyle.Regular; if(field.FontIsBold){ fontstyle=FontStyle.Bold; } font=new Font(field.FontName,field.FontSize,fontstyle); //calcH=(int)g.MeasureString(field.FieldValue,font).Height;//this was too short if(field.FieldType!=SheetFieldType.Grid) { calcH=GraphicsHelper.MeasureStringH(g,field.FieldValue,font,field.Width); } else {//handle grid height calculation seperately. calcH=CalculateGridHeightHelper(field,sheet,g,stmt,topMargin,bottomMargin,medLab); } if(calcH<=field.Height //calc height is smaller && field.FieldName!="StatementPayPlan") { continue; } int amountOfGrowth=calcH-field.Height; field.Height=calcH; if(field.GrowthBehavior==GrowthBehaviorEnum.DownLocal){ MoveAllDownWhichIntersect(sheet,field,amountOfGrowth); } else if(field.GrowthBehavior==GrowthBehaviorEnum.DownGlobal){ //All sheet grids should have DownGlobal growth. MoveAllDownBelowThis(sheet,field,amountOfGrowth); } } if(isPrinting) { //now break all text fields in between lines, not in the middle of actual text sheet.SheetFields.Sort(SheetFields.SortDrawingOrderLayers); int originalSheetFieldCount=sheet.SheetFields.Count; for(int i=0;i<originalSheetFieldCount;i++) { SheetField fieldCur=sheet.SheetFields[i]; if(fieldCur.FieldType==SheetFieldType.StaticText || fieldCur.FieldType==SheetFieldType.OutputText || fieldCur.FieldType==SheetFieldType.InputField) { //recursive function to split text boxes for page breaks in between lines of text, not in the middle of text CalculateHeightsPageBreak(fieldCur,sheet,g); } } //sort the fields again since we may have broken up some of the text fields into multiple fields and added them to sheetfields. sheet.SheetFields.Sort(SheetFields.SortDrawingOrderLayers); } //return sheetCopy; }
public static DataTable GetDataTableForGridType(string gridType,Statement stmt=null,MedLab medLab=null) { DataTable retVal=new DataTable(); switch(gridType) { case "StatementMain": retVal=getTable_StatementMain(stmt); break; case "StatementAging": retVal=getTable_StatementAging(stmt); break; case "StatementPayPlan": retVal=getTable_StatementPayPlan(stmt); break; case "StatementEnclosed": retVal=getTable_StatementEnclosed(stmt); break; case "MedLabResults": retVal=getTable_MedLabResults(medLab); break; default: break; } return retVal; }
///<summary>Cascading delete that deletes all MedLab, MedLabResult, MedLabSpecimen, and MedLabFacAttach. ///Also deletes any embedded PDFs that are linked to by the MedLabResults. ///The MedLabs and all associated results, specimens, and FacAttaches referenced by the MedLabNums in listExcludeMedLabNums will not be deleted. ///Used for deleting old entries and keeping new ones. The list may be empty and then all will be deleted.</summary> private void DeleteLabsAndResults(MedLab medLab,List<long> listExcludeMedLabNums=null) { List<MedLab> listLabsOld=MedLabs.GetForPatAndSpecimen(medLab.PatNum,medLab.SpecimenID,medLab.SpecimenIDFiller);//patNum could be 0 List<long> listLabNumsOld=new List<long>(); for(int i=listLabsOld.Count-1;i>-1;i--) {//backwards to remove any that are in the exclude list so it's filtered before filling the result list if(listExcludeMedLabNums!=null && listExcludeMedLabNums.Contains(listLabsOld[i].MedLabNum)) { listLabsOld.RemoveAt(i); continue; } listLabNumsOld.Add(listLabsOld[i].MedLabNum); } List<MedLabResult> listResultsOld=MedLabResults.GetAllForLabs(listLabsOld); List<long> listResultNumsOld=new List<long>(); List<Document> listDocs=new List<Document>(); for(int i=0;i<listResultsOld.Count;i++) { listResultNumsOld.Add(listResultsOld[i].MedLabResultNum); if(listResultsOld[i].DocNum==0) { continue; } //if DocNum is invalid, a new document object will be added to the list, but it will be skipped when trying to delete since the file won't exist listDocs.Add(Documents.GetByNum(listResultsOld[i].DocNum)); } if(listDocs.Count>0) { Patient labPat=Patients.GetPat(medLab.PatNum); if(labPat!=null) { try { ImageStore.DeleteDocuments(listDocs,ImageStore.GetPatientFolder(labPat,ImageStore.GetPreferredAtoZpath())); } catch(Exception ex) { MsgBox.Show(this,"Some images referenced by the MedLabResults could not be deleted and will have to be removed manually."); } } } MedLabSpecimens.DeleteAllForLabs(listLabNumsOld); MedLabFacAttaches.DeleteAllForLabsOrResults(listLabNumsOld,listResultNumsOld); MedLabResults.DeleteAll(listResultNumsOld); MedLabs.DeleteAll(listLabNumsOld); }
///<summary>Calculates height of grid taking into account page breaks, word wrapping, cell width, font size, and actual data to be used to fill this grid.</summary> private static int CalculateGridHeightHelper(SheetField field,Sheet sheet,Graphics g,Statement stmt,int topMargin,int bottomMargin,MedLab medLab) { UI.ODGrid odGrid=new UI.ODGrid(); odGrid.FontForSheets=new Font(field.FontName,field.FontSize,field.FontIsBold?FontStyle.Bold:FontStyle.Regular); odGrid.Width=field.Width; odGrid.HideScrollBars=true; odGrid.YPosField=field.YPos; odGrid.TopMargin=topMargin; odGrid.BottomMargin=bottomMargin; odGrid.PageHeight=sheet.HeightPage; odGrid.Title=field.FieldName; if(stmt!=null) { odGrid.Title+=(stmt.Intermingled?".Intermingled":".NotIntermingled");//Important for calculating heights. } DataTable Table=SheetUtil.GetDataTableForGridType(field.FieldName,stmt,medLab); List<DisplayField> Columns=SheetUtil.GetGridColumnsAvailable(field.FieldName); #region Fill Grid odGrid.BeginUpdate(); odGrid.Columns.Clear(); ODGridColumn col; for(int i=0;i<Columns.Count;i++) { col=new ODGridColumn(Columns[i].InternalName,Columns[i].ColumnWidth); odGrid.Columns.Add(col); } ODGridRow row; for(int i=0;i<Table.Rows.Count;i++) { row=new ODGridRow(); for(int c=0;c<Columns.Count;c++) {//Selectively fill columns from the dataTable into the odGrid. row.Cells.Add(Table.Rows[i][Columns[c].InternalName].ToString()); } if(Table.Columns.Contains("PatNum")) {//Used for statments to determine account splitting. row.Tag=Table.Rows[i]["PatNum"].ToString(); } odGrid.Rows.Add(row); } odGrid.EndUpdate(true);//Calls ComputeRows and ComputeColumns, meaning the RowHeights int[] has been filled. #endregion return odGrid.PrintHeight; }
///<summary>Used to revert any changes made to the MedLab object ///OR create embedded files attached to the currently selected patient. ///This will re-process the original HL7 message(s) from the archived file(s). ///Since there may be more than one HL7 message that comprises the information on the form, all messages for this specimen will be re-processed. ///The old MedLab object(s) and any MedLabResult, MedLabSpecimen, or MedLabFacAttach objects linked will be deleted and the form will fill with ///the new object based on the original file data. Right now users are only allowed to change the patient and provider, but more changes may be ///possible in the future that will be reverted.</summary> private bool ReprocessMessages() { Dictionary<string,string> dictFileNameFileText=new Dictionary<string,string>();//Key=Full file path to message file, value=HL7 message content for(int i=0;i<ListMedLabs.Count;i++) { try { //File IO, surround with try catch if(!dictFileNameFileText.ContainsKey(ListMedLabs[i].FileName)) { string fileTextCur=File.ReadAllText(ListMedLabs[i].FileName); dictFileNameFileText.Add(ListMedLabs[i].FileName,fileTextCur); } } catch(Exception ex) { MessageBox.Show(Lan.g(this,"Could not read the MedLab HL7 message text file located at")+" "+ListMedLabs[i].FileName+"."); return false; } } List<long> listMedLabNumsNew=new List<long>(); foreach(KeyValuePair<string,string> fileCur in dictFileNameFileText) { MessageHL7 msg=new MessageHL7(fileCur.Value); List<long> listMedLabNumsCur=MessageParserMedLab.Process(msg,fileCur.Key,false,PatCur);//re-creates the documents from the ZEF segments if(listMedLabNumsCur==null || listMedLabNumsCur.Count<1) { MsgBox.Show(this,"The HL7 message processed did not produce any MedLab objects."); return false; } listMedLabNumsNew.AddRange(listMedLabNumsCur); } //Delete all records except the ones just created DeleteLabsAndResults(_medLabCur, listMedLabNumsNew); ListMedLabs=MedLabs.GetForPatAndSpecimen(PatCur.PatNum,_medLabCur.SpecimenID,_medLabCur.SpecimenIDFiller);//handles PatNum=0 _medLabCur=ListMedLabs[0]; SetFields(); return true; }
private void FormMedLabEdit_Load(object sender,EventArgs e) { _medLabCur=ListMedLabs[0]; SetFields(); }
public static void drawFieldGrid(SheetField field,Sheet sheet,Graphics g,XGraphics gx,Statement stmt=null,MedLab medLab=null) { _printMargin.Top=40; if(sheet.SheetType==SheetTypeEnum.MedLabResults) { _printMargin.Top=120; } UI.ODGrid odGrid=new UI.ODGrid();//Only used for measurements, also contains printing/drawing logic. odGrid.FontForSheets=new Font(field.FontName,field.FontSize,field.FontIsBold?FontStyle.Bold:FontStyle.Regular); int _yAdjCurRow=0;//used to adjust for Titles, Headers, Rows, and footers (all considered part of the same row). odGrid.Width=0; List<DisplayField> Columns=SheetUtil.GetGridColumnsAvailable(field.FieldName); foreach(DisplayField Col in Columns) { odGrid.Width+=Col.ColumnWidth; } odGrid.Height=field.Height; odGrid.HideScrollBars=true; odGrid.YPosField=field.YPos; odGrid.Title=field.FieldName; if(stmt!=null) { odGrid.Title+=(stmt.Intermingled?".Intermingled":".NotIntermingled");//Important for calculating heights. } odGrid.TopMargin=_printMargin.Top; odGrid.BottomMargin=_printMargin.Bottom; odGrid.PageHeight=sheet.HeightPage; DataTable Table=SheetUtil.GetDataTableForGridType(field.FieldName,stmt,medLab); #region Fill Grid, Set Text Alignment odGrid.BeginUpdate(); odGrid.Columns.Clear(); ODGridColumn col; for(int i=0;i<Columns.Count;i++) { col=new ODGridColumn(Columns[i].Description,Columns[i].ColumnWidth); switch(field.FieldName+"."+Columns[i].InternalName) {//Unusual switch statement to differentiate similar column names in different grids. case "StatementMain.charges": case "StatementMain.credits": case "StatementMain.balance": case "StatementPayPlan.charges": case "StatementPayPlan.credits": case "StatementPayPlan.balance": col.TextAlign=HorizontalAlignment.Right; break; case "StatementAging.Age00to30": case "StatementAging.Age31to60": case "StatementAging.Age61to90": case "StatementAging.Age90plus": case "StatementEnclosed.AmountDue": case "StatementEnclosed.DateDue": col.TextAlign=HorizontalAlignment.Center; break; default: col.TextAlign=HorizontalAlignment.Left; break; } odGrid.Columns.Add(col); } ODGridRow row; for(int i=0;i<Table.Rows.Count;i++) { row=new ODGridRow(); for(int c=0;c<Columns.Count;c++) {//Selectively fill columns from the dataTable into the odGrid. row.Cells.Add(Table.Rows[i][Columns[c].InternalName].ToString()); } if(Table.Columns.Contains("PatNum")) {//Used for statments to determine account splitting. row.Tag=Table.Rows[i]["PatNum"].ToString(); } odGrid.Rows.Add(row); } odGrid.EndUpdate(true);//Calls ComputeRows and ComputeColumns, meaning the RowHeights int[] has been filled. #endregion for(int i=0;i<odGrid.RowHeights.Length;i++) { if(_isPrinting && (odGrid.PrintRows[i].YPos-_printMargin.Top<_yPosPrint //rows at the end of previous page || odGrid.PrintRows[i].YPos-sheet.HeightPage+_printMargin.Bottom>_yPosPrint)) { continue;//continue because we do not want to draw rows from other pages. } _yAdjCurRow=0; //if(odGrid.PrintRows[i].YPos<_yPosPrint // || odGrid.PrintRows[i].YPos-_yPosPrint>sheet.HeightPage) { // continue;//skip rows on previous page and rows on next page. //} #region Draw Title if(odGrid.PrintRows[i].IsTitleRow) { switch(field.FieldName) {//Draw titles differently for different grids. case "StatementMain": Patient pat=Patients.GetPat(PIn.Long(Table.Rows[i]["PatNum"].ToString())); string patName=""; if(pat!=null) {//should always be true patName=pat.GetNameFLnoPref(); } if(gx==null) { g.FillRectangle(Brushes.White,field.XPos-10,odGrid.PrintRows[i].YPos-_yPosPrint,odGrid.Width,odGrid.TitleHeight); g.DrawString(patName,new Font("Arial",10,FontStyle.Bold),new SolidBrush(Color.Black),field.XPos-10,odGrid.PrintRows[i].YPos-_yPosPrint); } else { gx.DrawRectangle(Brushes.White,p(field.XPos-10),p(odGrid.PrintRows[i].YPos-_yPosPrint-1),p(odGrid.Width),p(odGrid.TitleHeight)); using(Font _font=new Font("Arial",10,FontStyle.Bold)) { GraphicsHelper.DrawStringX(gx,Graphics.FromImage(new Bitmap(100,100)),(double)((1d)/p(1)),patName,new XFont(_font.FontFamily.ToString(),_font.Size,XFontStyle.Bold),XBrushes.Black,new XRect(p(field.XPos-10),p(odGrid.PrintRows[i].YPos-_yPosPrint-1),p(300),p(100)),XStringAlignment.Near); //gx.DrawString(patName,new XFont(_font.FontFamily.ToString(),_font.Size,XFontStyle.Bold),new SolidBrush(Color.Black),field.XPos-10,yPosGrid); } } break; case "StatementPayPlan": SizeF sSize=new SizeF(); using(Graphics f= Graphics.FromImage(new Bitmap(100,100))) {//using graphics f because g is null when gx is not. sSize=f.MeasureString("Payment Plans",new Font("Arial",10,FontStyle.Bold)); } if(gx==null) { g.FillRectangle(Brushes.White,field.XPos,odGrid.PrintRows[i].YPos-_yPosPrint,odGrid.Width,odGrid.TitleHeight); g.DrawString("Payment Plans",new Font("Arial",10,FontStyle.Bold),new SolidBrush(Color.Black),field.XPos+(field.Width-sSize.Width)/2,odGrid.PrintRows[i].YPos-_yPosPrint); } else { gx.DrawRectangle(Brushes.White,field.XPos,odGrid.PrintRows[i].YPos-_yPosPrint-1,odGrid.Width,odGrid.TitleHeight); using(Font _font=new Font("Arial",10,FontStyle.Bold)) { GraphicsHelper.DrawStringX(gx,Graphics.FromImage(new Bitmap(100,100)),(double)((1d)/p(1)),"Payment Plans",new XFont(_font.FontFamily.ToString(),_font.Size,XFontStyle.Bold),XBrushes.Black,new XRect(p(field.XPos+field.Width/2),p(odGrid.PrintRows[i].YPos-_yPosPrint-1),p(300),p(100)),XStringAlignment.Center); //gx.DrawString("Payment Plans",new XFont(_font.FontFamily.ToString(),_font.Size,XFontStyle.Bold),new SolidBrush(Color.Black),field.XPos+(field.Width-sSize.Width)/2,yPosGrid); } } break; default: if(gx==null) { odGrid.PrintTitle(g,field.XPos,odGrid.PrintRows[i].YPos-_yPosPrint); } else { odGrid.PrintTitleX(gx,field.XPos,odGrid.PrintRows[i].YPos-_yPosPrint); } break; } _yAdjCurRow+=odGrid.TitleHeight; } #endregion #region Draw Header if(odGrid.PrintRows[i].IsHeaderRow) { if(gx==null) { odGrid.PrintHeader(g,field.XPos,odGrid.PrintRows[i].YPos-_yPosPrint+_yAdjCurRow); } else { odGrid.PrintHeaderX(gx,field.XPos,odGrid.PrintRows[i].YPos-_yPosPrint+_yAdjCurRow); } _yAdjCurRow+=odGrid.HeaderHeight; } #endregion #region Draw Row if(gx==null) { odGrid.PrintRow(i,g,field.XPos,odGrid.PrintRows[i].YPos-_yPosPrint+_yAdjCurRow,odGrid.PrintRows[i].IsBottomRow,true); } else { odGrid.PrintRowX(i,gx,field.XPos,odGrid.PrintRows[i].YPos-_yPosPrint+_yAdjCurRow,odGrid.PrintRows[i].IsBottomRow,true); } _yAdjCurRow+=odGrid.RowHeights[i]; #endregion #region Draw Footer (rare) if(odGrid.PrintRows[i].IsFooterRow) { _yAdjCurRow+=2; switch(field.FieldName) { case "StatementPayPlan": DataTable tableMisc=AccountModules.GetStatementDataSet(stmt).Tables["misc"]; if(tableMisc==null) { tableMisc=new DataTable(); } Double payPlanDue=0; for(int m=0;m<tableMisc.Rows.Count;m++) { if(tableMisc.Rows[m]["descript"].ToString()=="payPlanDue") { payPlanDue=PIn.Double(tableMisc.Rows[m]["value"].ToString()); } } if(gx==null) { RectangleF rf=new RectangleF(sheet.Width-60-field.Width,odGrid.PrintRows[i].YPos-_yPosPrint+_yAdjCurRow,field.Width,odGrid.TitleHeight); g.FillRectangle(Brushes.White,rf); StringFormat sf=new StringFormat(); sf.Alignment=StringAlignment.Far; g.DrawString("Payment Plan Amount Due: "+payPlanDue.ToString("c"),new Font("Arial",9,FontStyle.Bold),new SolidBrush(Color.Black),rf,sf); } else { gx.DrawRectangle(Brushes.White,p(sheet.Width-field.Width-60),p(odGrid.PrintRows[i].YPos-_yPosPrint+_yAdjCurRow),p(field.Width),p(odGrid.TitleHeight)); using(Font _font=new Font("Arial",9,FontStyle.Bold)) { GraphicsHelper.DrawStringX(gx,Graphics.FromImage(new Bitmap(100,100)),(double)((1d)/p(1)),"Payment Plan Amount Due: "+payPlanDue.ToString("c"),new XFont(_font.FontFamily.ToString(),_font.Size,XFontStyle.Bold),XBrushes.Black,new XRect(p(sheet.Width-60),p(odGrid.PrintRows[i].YPos-_yPosPrint+_yAdjCurRow),p(field.Width),p(odGrid.TitleHeight)),XStringAlignment.Far); } } break; } } #endregion } }
///<Summary></Summary> public static void Print(Sheet sheet,int copies=1,bool isRxControlled=false,Statement stmt=null,MedLab medLab=null){ //parameter null check moved to SheetFiller. //could validate field names here later. _stmt=stmt; _medLab=medLab; _isPrinting=true; _sheetsPrinted=0; _yPosPrint=0;// _printMargin.Top; PrintDocument pd=new PrintDocument(); pd.OriginAtMargins=true; pd.PrintPage+=new PrintPageEventHandler(pd_PrintPage); if(pd.DefaultPageSettings.PrintableArea.Width==0) { //prevents bug in some printers that do not specify paper size pd.DefaultPageSettings.PaperSize=new PaperSize("paper",850,1100); } if(sheet.SheetType==SheetTypeEnum.LabelPatient || sheet.SheetType==SheetTypeEnum.LabelCarrier || sheet.SheetType==SheetTypeEnum.LabelAppointment || sheet.SheetType==SheetTypeEnum.LabelReferral) {//I think this causes problems for non-label sheet types. if(sheet.Width>0 && sheet.Height>0) { pd.DefaultPageSettings.PaperSize=new PaperSize("Default",sheet.Width,sheet.Height); } } pd.DefaultPageSettings.Margins=new Margins(0,0,0,0); pd.OriginAtMargins=true; PrintSituation sit=PrintSituation.Default; pd.DefaultPageSettings.Landscape=sheet.IsLandscape; switch(sheet.SheetType){ case SheetTypeEnum.LabelPatient: case SheetTypeEnum.LabelCarrier: case SheetTypeEnum.LabelReferral: case SheetTypeEnum.LabelAppointment: sit=PrintSituation.LabelSingle; break; case SheetTypeEnum.ReferralSlip: sit=PrintSituation.Default; break; case SheetTypeEnum.Rx: if(isRxControlled){ sit=PrintSituation.RxControlled; } else{ sit=PrintSituation.Rx; } break; case SheetTypeEnum.Statement: sit= PrintSituation.Statement; break; } _printMargin.Top=40;//default top margin if(sheet.SheetType==SheetTypeEnum.MedLabResults) { _printMargin.Top=120; } Sheets.SetPageMargin(sheet,_printMargin); Graphics g=Graphics.FromImage(new Bitmap(sheet.WidthPage,sheet.HeightPage)); g.SmoothingMode=SmoothingMode.HighQuality; g.InterpolationMode=InterpolationMode.HighQualityBicubic;//Necessary for very large images that need to be scaled down. SheetUtil.CalculateHeights(sheet,g,_stmt,_isPrinting,_printMargin.Top,_printMargin.Bottom,_medLab); _sheetList=new List<Sheet>(); for(int i=0;i<copies;i++) { _sheetList.Add(sheet.Copy()); } //later: add a check here for print preview. #if DEBUG FormPrintPreview printPreview; int pageCount=0; foreach(Sheet s in _sheetList) { pageCount+=Sheets.CalculatePageCount(s,_printMargin); } printPreview=new FormPrintPreview(sit,pd,pageCount,sheet.PatNum,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed"); printPreview.ShowDialog(); #else try { if(sheet.PatNum!=null){ if(!PrinterL.SetPrinter(pd,sit,sheet.PatNum,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed")) { return; } } else{ if(!PrinterL.SetPrinter(pd,sit,0,sheet.Description+" sheet from "+sheet.DateTimeSheet.ToShortDateString()+" printed")) { return; } } pd.DefaultPageSettings.Margins=new Margins(0,0,0,0); pd.Print(); } catch(Exception ex){ throw ex; //MessageBox.Show(Lan.g("Sheet","Printer not available")); } #endif _isPrinting=false; g.Dispose(); g=null; GC.Collect(); }
public static void CreatePdf(Sheet sheet,string fullFileName,Statement stmt,MedLab medLab=null) { _printMargin.Top=40; if(sheet.SheetType==SheetTypeEnum.MedLabResults) { _printMargin.Top=120; } _stmt=stmt; _medLab=medLab; _isPrinting=true; _yPosPrint=0; PdfDocument document=new PdfDocument(); Graphics g=Graphics.FromImage(new Bitmap(sheet.WidthPage,sheet.HeightPage)); g.SmoothingMode=SmoothingMode.HighQuality; g.InterpolationMode=InterpolationMode.HighQualityBicubic;//Necessary for very large images that need to be scaled down. //this will set the page breaks as well as adjust for growth behavior SheetUtil.CalculateHeights(sheet,g,_stmt,_isPrinting,_printMargin.Top,_printMargin.Bottom,_medLab); int pageCount=Sheets.CalculatePageCount(sheet,_printMargin); for(int i=0;i<pageCount;i++) { _pagesPrinted=i; PdfPage page=document.AddPage(); CreatePdfPage(sheet,page); } document.Save(fullFileName); _isPrinting=false; }