int GetDate(long *dd, long *mm, long *yyyy) { long date; while(TRUE) { date = NO_RECORD; CPickDate dlg(NULL, &date); if(dlg.DoModal() != IDOK) { return(NO_RECORD); } GetYMD(date, yyyy, mm, dd); CTime spanDate(*yyyy, *mm, *dd, 0, 0, 0); if(spanDate.GetDayOfWeek() == 2) { return(TRUE); } MessageBox(NULL, "Please select a Monday", TMS, MB_OK); } }
sltime GetTime(char* time) { if (g_year == 0) GetYMD(); int hour; int min; int sec; char buf[4] = { 0 }; memcpy(buf, time, 2); hour = atoi(buf); memcpy(buf, time +2, 2); min = atoi(buf); memcpy(buf, time + 4, 2); sec = atoi(buf); return sltime(g_year, g_month, g_day, hour, min, sec); }
// // Unassigned drivers report // BOOL FAR TMSRPT13(TMSRPTPassedDataDef *pPassedData) { HFILE hfOutputFile; BOOL bKeepGoing = FALSE; char szOutputString[128]; long year, month,day; int rcode2; int nI; pPassedData->nReportNumber = 12; pPassedData->numDataFiles = 1; for(nI = 0; nI < m_LastReport; nI++) { if(TMSRPT[nI].originalReportNumber == pPassedData->nReportNumber) { StatusBarStart(hWndMain, TMSRPT[nI].szReportName); break; } } // // Open the output file // StatusBarText("Cycling through roster..."); strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\tmsrpt13.txt"); hfOutputFile = _lcreat(tempString, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); // // Loop through the drivers in seniority order // rcode2 = btrieve(B_GETFIRST, TMS_DRIVERS, &DRIVERS, &DRIVERSKey2, 2); while(rcode2 == 0) { if(ConsideringThisDriverType(DRIVERS.DRIVERTYPESrecordID)) { ROSTERKey2.DRIVERSrecordID = DRIVERS.recordID; rcode2 = btrieve(B_GETEQUAL, TMS_ROSTER, &ROSTER, &ROSTERKey2, 2); if(rcode2 != 0) { if(DRIVERS.DRIVERTYPESrecordID == NO_RECORD) { strcpy(tempString, ""); } else { DRIVERTYPESKey0.recordID = DRIVERS.DRIVERTYPESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_DRIVERTYPES, &DRIVERTYPES, &DRIVERTYPESKey0, 0); if(rcode2 != 0) { strcpy(tempString, ""); } else { strncpy(tempString, DRIVERTYPES.name, DRIVERTYPES_NAME_LENGTH); trim(tempString, DRIVERTYPES_NAME_LENGTH); } } strcpy(szOutputString, tempString); strcat(szOutputString, "\t"); GetYMD(DRIVERS.seniorityDate, &year, &month, &day); sprintf(tempString, "%4ld/%02ld/%02ld - ", year, month, day); strcat(szOutputString, tempString); strncpy(tempString, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(tempString, DRIVERS_LASTNAME_LENGTH); strcat(szOutputString, tempString); strcat(szOutputString, ", "); strncpy(tempString, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(tempString, DRIVERS_FIRSTNAME_LENGTH); strcat(szOutputString, tempString); strncpy(tempString, DRIVERS.badgeNumber, DRIVERS_BADGENUMBER_LENGTH); trim(tempString, DRIVERS_BADGENUMBER_LENGTH); if(strcmp(tempString, "") != 0) { strcat(szOutputString, " (Badge "); strcat(szOutputString, tempString); strcat(szOutputString, ")"); } strcat(szOutputString, "\r\n"); _lwrite(hfOutputFile, szOutputString, strlen(szOutputString)); } } rcode2 = btrieve(B_GETNEXT, TMS_DRIVERS, &DRIVERS, &DRIVERSKey2, 2); } bKeepGoing = TRUE; // // Free allocated memory / close output file // deallocate: _lclose(hfOutputFile); StatusBarEnd(); if(!bKeepGoing) return(FALSE); // // All done // return(TRUE); }
BOOL FAR TMSRPT67(TMSRPTPassedDataDef *pPassedData) { NodesAndStopsDef NodesAndStops[TMSRPT67_MAXNODESANDSTOPS]; GetConnectionTimeDef GCTData; GenerateTripDef GTResults; BLOCKSDef *pTRIPSChunk; double prevLat, prevLon; HFILE hfOutputFile; HFILE hfErrorLog; float distanceToHere; float tripDistances[100]; float distance; struct tm tmED, tmUD, today; time_t EDmktime; time_t UDmktime; time_t now; BOOL bFound; BOOL bGotError; BOOL bFinishedOK; BOOL bBikeRack; BOOL bFirst; long SERVICESinEffect[TMSRPT66_MAXSERVICES]; long year, month, day; long serviceRecordID; long previousPattern; long timeAtStop; long absRecID; long stopFlags; long stopNumber; long assignedToNODESrecordID; long blockNumber; long fromNODESrecordID; long toNODESrecordID; long toTime; long fromTime; long dhd; long number; char outputString[1024]; char outputStringSave[1024]; char out2[1024]; char *ptr; char *pszReportName; char outputFileName[64]; char szServiceCode[SERVICES_NAME_LENGTH + 1]; char szTripCode[16]; int nI; int rcode2; int dayOfWeek; int numServices; int tripIndex; int numNodes; int seq; bFinishedOK = FALSE; // // Maintain the distance measure // distanceMeasureSave = distanceMeasure; distanceMeasure = PREFERENCES_MILES; // // Set up the trip planner // if(bUseDynamicTravels) { if(bUseCISPlan) { CISfree(); if(!CISbuild(FALSE, TRUE)) { goto done; } } else { rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); while(rcode2 == 0) { serviceRecordID = SERVICES.recordID; InitTravelMatrix(serviceRecordID, TRUE); SERVICESKey0.recordID = serviceRecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); btrieve(B_GETPOSITION, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); btrieve(B_GETDIRECT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); } } } // // Create the sub-folder for the output files and chdir into it // nI = (_mkdir(OUTPUT_FOLDER_NAME) == 0) ? TEXT_333 : TEXT_334; LoadString(hInst, nI, szFormatString, SZFORMATSTRING_LENGTH); sprintf(tempString, szFormatString, OUTPUT_FOLDER_NAME); MessageBeep(MB_ICONINFORMATION); MessageBox(NULL, tempString, TMS, MB_OK); chdir(OUTPUT_FOLDER_NAME); // // Open the error log and fire up the status bar // hfErrorLog = _lcreat("error.log", 0); if(hfErrorLog == HFILE_ERROR) { TMSError((HWND)NULL, MB_ICONSTOP, ERROR_226, (HANDLE)NULL); goto done; } bGotError = FALSE; pPassedData->nReportNumber = 66; for(nI = 0; nI < m_LastReport; nI++) { if(TMSRPT[nI].originalReportNumber == pPassedData->nReportNumber) { pszReportName = TMSRPT[nI].szReportName; StatusBarStart(hWndMain, TMSRPT[nI].szReportName); break; } } // // Get today's date // time(&now); today = *localtime(&now); // // ============================== // Service File - oci_service.csv // ============================== // if(StatusBarAbort()) { goto done; } strcpy(outputFileName, "oci_service.csv"); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } StatusBarText(outputFileName); // // Write out the header // strcpy(outputString, "\"ServiceCode\",\"Date\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); numServices = 0; // // Dump out the service day based on calendar days // // Effective date // GetYMD(effectiveDate, &year, &month, &day); memset(&tmED, 0x00, sizeof(tmED)); tmED.tm_mday = day; tmED.tm_mon = month - 1; tmED.tm_year = year - 1900; // // Until date // GetYMD(untilDate, &year, &month, &day); memset(&tmUD, 0x00, sizeof(tmUD)); tmUD.tm_mday = day; tmUD.tm_mon = month - 1; tmUD.tm_year = year - 1900; // // Start at the effective date and go to the until date // EDmktime = mktime(&tmED); if(EDmktime == (time_t)(-1)) { LoadString(hInst, ERROR_328, szFormatString, SZFORMATSTRING_LENGTH); sprintf(outputString, szFormatString, 1); _lwrite(hfErrorLog, outputString, strlen(outputString)); bGotError = TRUE; } else { UDmktime = mktime(&tmUD); while(EDmktime <= UDmktime) { if(StatusBarAbort()) { goto done; } dayOfWeek = (tmED.tm_wday == 0 ? 6 : tmED.tm_wday - 1); for(bFound = FALSE, nI = 0; nI < numServices; nI++) { if(ROSTERPARMS.serviceDays[dayOfWeek] == SERVICESinEffect[nI]) { bFound = TRUE; break; } } if(!bFound) { SERVICESinEffect[numServices] = ROSTERPARMS.serviceDays[dayOfWeek]; numServices++; } // // ServiceCode (SERVICES.recordID) // SERVICESKey0.recordID = ROSTERPARMS.serviceDays[dayOfWeek]; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(tempString, SERVICES.name, SERVICES_NAME_LENGTH); trim(tempString, SERVICES_NAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcpy(outputString, szarString); // // Date // sprintf(szarString, "\"%4ld%02ld%02ld\"\r\n", tmED.tm_year + 1900, tmED.tm_mon + 1, tmED.tm_mday); strcat(outputString, szarString); // // Write out the record // _lwrite(hfOutputFile, outputString, strlen(outputString)); // // Figure out the next day // tmED.tm_mday++; EDmktime = mktime(&tmED); if(EDmktime == (time_t)(-1)) { LoadString(hInst, ERROR_328, szFormatString, SZFORMATSTRING_LENGTH); sprintf(outputString, szFormatString, 1); _lwrite(hfErrorLog, outputString, strlen(outputString)); bGotError = TRUE; } } } // // Close the file // _lclose(hfOutputFile); // // ============================ // Routes File - oci_routes.csv // ============================ // if(StatusBarAbort()) { goto done; } strcpy(outputFileName, "oci_routes.csv"); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } StatusBarText(outputFileName); // // Write out the header // strcpy(outputString, "\"RouteCode\",\"RouteName\",\"DirectionCode\",\"DirectionName\",\"PatternCode\",\"PatternName\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); // // Traverse the Routes Table // rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } // // Go through the directions // for(nI = 0; nI < 2; nI++) { if(ROUTES.DIRECTIONSrecordID[nI] == NO_RECORD) { continue; } // // RouteCode (ROUTES.number) // strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcpy(outputString, szarString); // // RouteName (ROUTES.name) // strncpy(tempString, ROUTES.name, ROUTES_NAME_LENGTH); trim(tempString, ROUTES_NAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // DirectionCode (DIRECTIONS.abbrName) // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(tempString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(tempString, DIRECTIONS_ABBRNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // DirectionName (DIRECTIONS.longName) // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(tempString, DIRECTIONS.longName, DIRECTIONS_LONGNAME_LENGTH); trim(tempString, DIRECTIONS_LONGNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Cycle through the patterns for route/service/direction // strcpy(outputStringSave, outputString); rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); while(rcode2 == 0) { PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.PATTERNNAMESrecordID = basePatternRecordID; PATTERNSKey2.directionIndex = nI; PATTERNSKey2.nodeSequence = NO_RECORD; previousPattern = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nI) { if(PATTERNS.PATTERNNAMESrecordID != previousPattern) { // // PatternCode (SERVICES.recordID-PATTERNNAMES.recordID) // sprintf(szarString, "\"%ld-%ld\",", SERVICES.recordID, PATTERNS.PATTERNNAMESrecordID); strcat(outputString, szarString); // // PatternName (PATTERNNAMES.name) // PATTERNNAMESKey0.recordID = PATTERNS.PATTERNNAMESrecordID; btrieve(B_GETEQUAL, TMS_PATTERNNAMES, &PATTERNNAMES, &PATTERNNAMESKey0, 0); strncpy(tempString, PATTERNNAMES.name, PATTERNNAMES_NAME_LENGTH); trim(tempString, PATTERNNAMES_NAME_LENGTH); sprintf(szarString, "\"%s\"\r\n", tempString); strcat(outputString, szarString); // // Write out the record and get the next pattern // _lwrite(hfOutputFile, outputString, strlen(outputString)); strcpy(outputString, outputStringSave); previousPattern = PATTERNS.PATTERNNAMESrecordID; } rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); } } // nI // // Get the next route // rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } // // Close the file // _lclose(hfOutputFile); // // ============================== // Bus Stops File - oci_stops.csv // ============================== // if(StatusBarAbort()) { goto done; } strcpy(outputFileName, "oci_stops.csv"); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } // // Write out the header // strcpy(outputString, "\"StopCode\",\"StopName\",\"Latitude\",\"Longitude\",\"Shelter\",\"Bench\",\"Accessible\",\"TimingPoint\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); StatusBarText(outputFileName); // // Get the list of nodes // // // Cycle through the Nodes Table to get associated stop numbers // rcode2 = btrieve(B_GETFIRST, TMS_NODES, &NODES, &NODESKey0, 0); numNodes = 0; while(rcode2 == 0) { if(!(NODES.flags & NODES_FLAG_STOP)) { NodesAndStops[numNodes].NODESrecordID = NODES.recordID; NodesAndStops[numNodes].StopNumber = NODES.number; NodesAndStops[numNodes].OutboundStopNumber = NODES.OBStopNumber; NodesAndStops[numNodes].InboundStopNumber = NODES.IBStopNumber; numNodes++; if(numNodes >= TMSRPT67_MAXNODESANDSTOPS) { MessageBeep(MB_ICONSTOP); MessageBox(NULL, "TMSRPT67_MAXNODESANDSTOPS Exceeded.\n\nPlease contact Schedule Masters, Inc. for help", TMS, MB_OK | MB_ICONSTOP); goto done; } } rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey0, 0); } // // Cycle through the Nodes Table // rcode2 = btrieve(B_GETFIRST, TMS_NODES, &NODES, &NODESKey0, 0); while(rcode2 == 0) { // // StopCode (NODES.number or NODES.abbrName) // if(NODES.flags & NODES_FLAG_STOP) { sprintf(szarString, "\"%04ld\",", NODES.number); } else { // strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); // trim(tempString, NODES_ABBRNAME_LENGTH); // sprintf(szarString, "\"%s\",", tempString); if(nI == 0) { number = (NODES.OBStopNumber <= 0 ? NODES.number : NODES.OBStopNumber); } else { number = (NODES.IBStopNumber <= 0 ? NODES.number : NODES.IBStopNumber); } sprintf(szarString, "\"%04ld\",", number); } strcpy(outputString, szarString); // // StopName (NODES.intersection) // strncpy(tempString, NODES.intersection, NODES_INTERSECTION_LENGTH); trim(tempString, NODES_INTERSECTION_LENGTH); ptr = strstr(tempString, "&&"); if(ptr) { *ptr = 'a'; *(ptr + 1) = 't'; } sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Latitude (NODES.latitude) // sprintf(tempString, "%12.6f", NODES.latitude); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcat(outputString, szarString); // // Longitude (NODES.longitude) // sprintf(tempString, "%12.6f", NODES.longitude); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcat(outputString, szarString); // // If this isn't a stop, look to see if we can find the stop in the Nodes Table // if(NODES.flags & NODES_FLAG_STOP) { stopFlags = NODES.stopFlags; } else { stopFlags = 0; stopNumber = NO_RECORD; if(NODES.number > 0) { stopNumber = NODES.number; } if(stopNumber == NO_RECORD && NODES.OBStopNumber > 0) { stopNumber = NODES.OBStopNumber; } if(stopNumber == NO_RECORD && NODES.IBStopNumber > 0) { stopNumber = NODES.IBStopNumber; } if(stopNumber != NO_RECORD) { btrieve(B_GETPOSITION, TMS_NODES, &absRecID, &NODESKey0, 0); rcode2 = btrieve(B_GETFIRST, TMS_NODES, &NODES, &NODESKey0, 0); while(rcode2 == 0) { if(NODES.flags & NODES_FLAG_STOP) { if(NODES.number == stopNumber) { stopFlags = NODES.stopFlags; break; } } rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey0, 0); } NODES.recordID = absRecID; btrieve(B_GETDIRECT, TMS_NODES, &NODES, &NODESKey0, 0); } } // // Shelter (item 12 from "Stop Flags.txt") // sprintf(tempString, (stopFlags & (1 << 12) ? "True" : "False")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Bench (item 5 from "Stop Flags.txt") // sprintf(tempString, (stopFlags & (1 << 5) ? "True" : "False")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Accessible (item 16 from "Stop Flags.txt") // sprintf(tempString, (stopFlags & (1 << 6) ? "True" : "False")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Timing point? // if(!(NODES.flags & NODES_FLAG_STOP)) { bFound = TRUE; } else { bFound = FALSE; for(nI = 0; nI < numNodes; nI++) { if(NodesAndStops[nI].StopNumber == NODES.number || NodesAndStops[nI].OutboundStopNumber == NODES.number || NodesAndStops[nI].InboundStopNumber == NODES.number) { bFound = TRUE; break; } } } sprintf(tempString, (bFound ? "True" : "False")); sprintf(szarString, "\"%s\"\r\n", tempString); strcat(outputString, szarString); // // Write it out and get the next node // _lwrite(hfOutputFile, outputString, strlen(outputString)); rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey0, 0); } // // Close the file // _lclose(hfOutputFile); // // ==================================== // Bus Patterns File - oci_patterns.csv // ==================================== // if(StatusBarAbort()) { goto done; } strcpy(outputFileName, "oci_patterns.csv"); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } // // Write out the header // strcpy(outputString, "\"RouteCode\",\"DirectionCode\",\"PatternCode\",\"StopCode\",\"Sequence\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); StatusBarText(outputFileName); // // Traverse the Routes Table // rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } for(nI = 0; nI < 2; nI++) { if(ROUTES.DIRECTIONSrecordID[nI] == NO_RECORD) { continue; } // // RouteCode (ROUTES.number) // strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcpy(outputString, szarString); // // DirectionCode (DIRECTIONS.abbrName) // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(tempString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(tempString, DIRECTIONS_ABBRNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Go through all the services // strcpy(outputStringSave, outputString); rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); while(rcode2 == 0) { // // Go through all the patterns // PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.PATTERNNAMESrecordID = basePatternRecordID; PATTERNSKey2.directionIndex = nI; PATTERNSKey2.nodeSequence = -1; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); previousPattern = NO_RECORD; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nI) { if(previousPattern != PATTERNS.PATTERNNAMESrecordID) { previousPattern = PATTERNS.PATTERNNAMESrecordID; seq = 1; } // // PatternCode (SERVICES.recordID-PATTERNS.PATTERNNAMESrecordID) // sprintf(szarString, "\"%ld-%ld\",", SERVICES.recordID, PATTERNS.PATTERNNAMESrecordID); strcat(outputString, szarString); // // StopCode (NODES.number or NODES.abbrName) // NODESKey0.recordID = PATTERNS.NODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); if(!(NODES.flags & NODES_FLAG_STOP)) { if(nI == 0) { number = (NODES.OBStopNumber <= 0 ? NODES.number : NODES.OBStopNumber); } else { number = (NODES.IBStopNumber <= 0 ? NODES.number : NODES.IBStopNumber); } sprintf(tempString, "%04ld", number); // strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); // trim(tempString, NODES_ABBRNAME_LENGTH); } else { sprintf(tempString, "%04ld", NODES.number); } sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Sequence // sprintf(tempString, "\"%d\"\r\n", seq++); strcat(outputString, tempString); // // Write it out and get the next node on the pattern // _lwrite(hfOutputFile, outputString, strlen(outputString)); strcpy(outputString, outputStringSave); rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } // while on patterns rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); } } // nI // // Get the next route // rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } // // Close the file // _lclose(hfOutputFile); // // ========================================== // Bus Trips File - oci_trips_{RouteCode}.dat // ========================================== // // // Traverse the Routes Table // rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(outputFileName, "oci_trips_%s.csv", ptr); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } // // Write out the header // strcpy(outputString, "\"RouteCode\",\"DirectionCode\",\"PatternCode\",\"TripCode\",\"StopCode\",\"Sequence\",\"ArrivalTime\",\"DepartureTime\",\"TimingPoint\",\"Bicycles\",\"ServiceCode\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); StatusBarText(outputFileName); // // Go through the services // rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } strncpy(szServiceCode, SERVICES.name, SERVICES_NAME_LENGTH); trim(szServiceCode, SERVICES_NAME_LENGTH); // // Loop through the directions // for(nI = 0; nI < 2; nI++) { if(ROUTES.DIRECTIONSrecordID[nI] == NO_RECORD) { continue; } // // RouteCode (ROUTES.number) // strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); ptr = tempString; while(ptr && *ptr == ' ') { ptr++; } sprintf(szarString, "\"%s\",", ptr); strcpy(outputString, szarString); // // DirectionCode (DIRECTIONS.abbrName) // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[nI]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(tempString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(tempString, DIRECTIONS_ABBRNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); strcpy(out2, outputString); // // Get the trips for this route/ser/dir // TRIPSKey1.ROUTESrecordID = ROUTES.recordID; TRIPSKey1.SERVICESrecordID = SERVICES.recordID; TRIPSKey1.directionIndex = nI; TRIPSKey1.tripSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); while(rcode2 == 0 && TRIPS.ROUTESrecordID == ROUTES.recordID && TRIPS.SERVICESrecordID == SERVICES.recordID && TRIPS.directionIndex == nI) { strcpy(outputString, out2); // // PatternCode (SERVICES.recordID-PATTERNNAMES.recordID) // sprintf(szarString, "\"%ld-%ld\",", TRIPS.SERVICESrecordID, TRIPS.PATTERNNAMESrecordID); strcat(outputString, szarString); // // TripCode (TRIPS.tripNumber) // sprintf(szarString, "\"%ld\",", TRIPS.tripNumber); strcat(outputString, szarString); // // Does this vehicle have a bike rack? // bBikeRack = FALSE; if(TRIPS.BUSTYPESrecordID != NO_RECORD) { BUSTYPESKey0.recordID = TRIPS.BUSTYPESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_BUSTYPES, &BUSTYPES, &BUSTYPESKey0, 0); if(rcode2 == 0) { if(BUSTYPES.flags & BUSTYPES_FLAG_CARRIER) { bBikeRack = TRUE; } } } // // Generate the trip // GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); // // Go through the pattern twice // // Pass 1 - Determine distances at each timepoint // if(GTResults.tripDistance != 0.0) { PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.directionIndex = nI; PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); tripIndex = 0; distanceToHere = 0.0; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nI && PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { NODESKey0.recordID = PATTERNS.NODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); if(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP) { distanceToHere += (float)GreatCircleDistance(prevLon, prevLat, NODES.longitude, NODES.latitude); } else { tripDistances[tripIndex] = distanceToHere; tripIndex++; } prevLat = NODES.latitude; prevLon = NODES.longitude; rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } } // // Save outputString to this point // strcpy(outputStringSave, outputString); // // Pass 2 - Determine time interpolations and output the records // PATTERNSKey2.ROUTESrecordID = ROUTES.recordID; PATTERNSKey2.SERVICESrecordID = SERVICES.recordID; PATTERNSKey2.directionIndex = nI; PATTERNSKey2.PATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; PATTERNSKey2.nodeSequence = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); tripIndex = 0; seq = 1; distanceToHere = 0.0; while(rcode2 == 0 && PATTERNS.ROUTESrecordID == ROUTES.recordID && PATTERNS.SERVICESrecordID == SERVICES.recordID && PATTERNS.directionIndex == nI && PATTERNS.PATTERNNAMESrecordID == TRIPS.PATTERNNAMESrecordID) { NODESKey0.recordID = PATTERNS.NODESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); if(PATTERNS.flags & PATTERNS_FLAG_BUSSTOP) { if(GTResults.tripDistance == 0) { timeAtStop = GTResults.tripTimes[tripIndex - 1]; } else { distanceToHere += (float)GreatCircleDistance(prevLon, prevLat, NODES.longitude, NODES.latitude); timeAtStop = (long)((GTResults.tripTimes[tripIndex] - GTResults.tripTimes[tripIndex - 1]) * (distanceToHere / (tripDistances[tripIndex] - tripDistances[tripIndex - 1]))); timeAtStop += (GTResults.tripTimes[tripIndex - 1]); } } else { timeAtStop = GTResults.tripTimes[tripIndex]; distanceToHere = 0.0; tripIndex++; } // // StopCode (NODES.number or NODES.abbrName) // /* if(NODES.flags & NODES_FLAG_STOP) { sprintf(szarString, "\"%04ld\",", NODES.number); } else { strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); sprintf(szarString, "\"%s\",", tempString); } */ if(!(NODES.flags & NODES_FLAG_STOP)) { if(nI == 0) { number = (NODES.OBStopNumber <= 0 ? NODES.number : NODES.OBStopNumber); } else { number = (NODES.IBStopNumber <= 0 ? NODES.number : NODES.IBStopNumber); } sprintf(szarString, "\"%04ld\",", number); } else { sprintf(szarString, "\"%04ld\",", NODES.number); } strcat(outputString, szarString); // // Sequence // sprintf(szarString, "\"%d\",", seq++); strcat(outputString, szarString); // // ArrivalTime (Time at the stop, in seconds) // // Now time is in HHMM (11-Aug-08) // // sprintf(szarString, "\"%ld\",", timeAtStop); sprintf(szarString, "\"%s\",", TcharNAP(timeAtStop, FALSE)); strcat(outputString, szarString); // // DepartureTime (Time at the stop, in seconds) // // Now time is in HHMM (11-Aug-08) // // sprintf(szarString, "\"%ld\",", timeAtStop); sprintf(szarString, "\"%s\",", TcharNAP(timeAtStop, FALSE)); strcat(outputString, szarString); // // Timepoint? // sprintf(tempString, "%s", (NODES.flags & NODES_FLAG_STOP ? "False" : "True")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // Bicycles? // sprintf(tempString, "%s", (bBikeRack ? "True" : "False")); sprintf(szarString, "\"%s\",", tempString); strcat(outputString, szarString); // // ServiceCode // sprintf(szarString, "\"%s\"\r\n", szServiceCode); strcat(outputString, szarString); // // Write it out and go back // _lwrite(hfOutputFile, outputString, strlen(outputString)); strcpy(outputString, outputStringSave); prevLat = NODES.latitude; prevLon = NODES.longitude; rcode2 = btrieve(B_GETNEXT, TMS_PATTERNS, &PATTERNS, &PATTERNSKey2, 2); } // while on pattern // // Get the next trip // rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey1, 1); } // while on trips } // nI (directions on the route) // // Get the next service // rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); } // // Close the file // _lclose(hfOutputFile); // // Get the next route // rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } // // Blocks // // // ============================ // Blocks File - oci_blocks.dat // ============================ // pTRIPSChunk = &TRIPS.standard; sprintf(outputFileName, "oci_blocks.csv", ptr); hfOutputFile = _lcreat(outputFileName, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_320, szFormatString, SZFORMATSTRING_LENGTH); sprintf(szarString, szFormatString, outputFileName); MessageBeep(MB_ICONSTOP); MessageBox(NULL, szarString, TMS, MB_OK | MB_ICONSTOP); goto done; } // // Write out the header // strcpy(outputString, "\"BlockCode\",\"ServiceCode\",\"TripCode\",\"Sequence\",\"StartStopCode\",\"EndStopCode\",\"InService\"\r\n"); _lwrite(hfOutputFile, outputString, strlen(outputString)); StatusBarText(outputFileName); // // Traverse the Routes Table // rcode2 = btrieve(B_GETFIRST, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } // // Go through the services // rcode2 = btrieve(B_GETFIRST, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); while(rcode2 == 0) { if(StatusBarAbort()) { goto done; } strncpy(szServiceCode, SERVICES.name, SERVICES_NAME_LENGTH); trim(szServiceCode, SERVICES_NAME_LENGTH); // // Get all the blocks on this route group // NODESKey1.flags = NODES_FLAG_GARAGE; memset(NODESKey1.abbrName, 0x00, NODES_ABBRNAME_LENGTH); rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_NODES, &NODES, &NODESKey1, 1); bFirst = TRUE; while(rcode2 == 0 && NODES.flags & NODES_FLAG_GARAGE) { // // Cycle through the blocks // assignedToNODESrecordID = bFirst ? NO_RECORD : NODES.recordID; TRIPSKey2.assignedToNODESrecordID = assignedToNODESrecordID; TRIPSKey2.RGRPROUTESrecordID = ROUTES.recordID; TRIPSKey2.SGRPSERVICESrecordID = SERVICES.recordID; TRIPSKey2.blockNumber = 1; TRIPSKey2.blockSequence = NO_TIME; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey2, 2); blockNumber = NO_RECORD; // // Get the first trip on the block // while(rcode2 == 0 && pTRIPSChunk->assignedToNODESrecordID == assignedToNODESrecordID && pTRIPSChunk->RGRPROUTESrecordID == ROUTES.recordID && pTRIPSChunk->SGRPSERVICESrecordID == SERVICES.recordID) { if(StatusBarAbort()) { goto done; } if(pTRIPSChunk->blockNumber != blockNumber) { seq = 1; blockNumber = pTRIPSChunk->blockNumber; } // // Gen the whole trip // GenerateTrip(TRIPS.ROUTESrecordID, TRIPS.SERVICESrecordID, TRIPS.directionIndex, TRIPS.PATTERNNAMESrecordID, TRIPS.timeAtMLP, GENERATETRIP_FLAG_DISPLAYERRORS, >Results); // // Pullout? // if(pTRIPSChunk->POGNODESrecordID == NO_RECORD) { fromNODESrecordID = GTResults.firstNODESrecordID; fromTime = GTResults.firstNodeTime; } else { GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.fromROUTESrecordID = pTRIPSChunk->RGRPROUTESrecordID; GCTData.fromSERVICESrecordID = pTRIPSChunk->SGRPSERVICESrecordID; GCTData.toROUTESrecordID = pTRIPSChunk->RGRPROUTESrecordID; GCTData.toSERVICESrecordID = pTRIPSChunk->SGRPSERVICESrecordID; GCTData.fromNODESrecordID = pTRIPSChunk->POGNODESrecordID; GCTData.toNODESrecordID = GTResults.firstNODESrecordID; GCTData.timeOfDay = GTResults.firstNodeTime; dhd = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance); distance = (float)fabs((double)distance); if(dhd == NO_TIME) { dhd = 0; } fromNODESrecordID = pTRIPSChunk->POGNODESrecordID; fromTime = GTResults.firstNodeTime - dhd; // // Output the pull-out deadhead record // // Start and End Stop codes // NODESKey0.recordID = pTRIPSChunk->POGNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); NODESKey0.recordID = GTResults.firstNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(szarString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(szarString, NODES_ABBRNAME_LENGTH); // // Write it // sprintf(outputString, "\"%ld\",\"%s\",\"\",\"%d\",\"%s\",\"%s\",\"False\"\r\n", pTRIPSChunk->blockNumber, szServiceCode, seq, tempString, szarString); _lwrite(hfOutputFile, outputString, strlen(outputString)); seq++; } // // Start/end trip details // sprintf(szTripCode, "%ld", TRIPS.tripNumber); // // Start and End Stop codes // NODESKey0.recordID = GTResults.firstNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); NODESKey0.recordID = GTResults.lastNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(szarString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(szarString, NODES_ABBRNAME_LENGTH); // // Write it // sprintf(outputString, "\"%ld\",\"%s\",\"%s\",\"%d\",\"%s\",\"%s\",\"True\"\r\n", pTRIPSChunk->blockNumber, szServiceCode, szTripCode, seq, tempString, szarString); _lwrite(hfOutputFile, outputString, strlen(outputString)); seq++; // // Pullin // if(pTRIPSChunk->PIGNODESrecordID == NO_RECORD) { toNODESrecordID = GTResults.lastNODESrecordID; toTime = GTResults.lastNodeTime; } else { GCTData.fromPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.toPATTERNNAMESrecordID = TRIPS.PATTERNNAMESrecordID; GCTData.fromROUTESrecordID = pTRIPSChunk->RGRPROUTESrecordID; GCTData.fromSERVICESrecordID = pTRIPSChunk->SGRPSERVICESrecordID; GCTData.toROUTESrecordID = pTRIPSChunk->RGRPROUTESrecordID; GCTData.toSERVICESrecordID = pTRIPSChunk->SGRPSERVICESrecordID; GCTData.fromNODESrecordID = GTResults.lastNODESrecordID; GCTData.toNODESrecordID = pTRIPSChunk->PIGNODESrecordID; GCTData.timeOfDay = GTResults.lastNodeTime; dhd = GetConnectionTime(GCT_FLAG_DEADHEADTIME, &GCTData, &distance); distance = (float)fabs((double)distance); if(dhd == NO_TIME) { dhd = 0; } toNODESrecordID = pTRIPSChunk->PIGNODESrecordID; toTime = GTResults.lastNodeTime + dhd; // // Output the pull-in deadhead record // // Start and End Stop codes // NODESKey0.recordID = GTResults.lastNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(tempString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(tempString, NODES_ABBRNAME_LENGTH); NODESKey0.recordID = pTRIPSChunk->PIGNODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(szarString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(szarString, NODES_ABBRNAME_LENGTH); // // Write it // sprintf(outputString, "\"%ld\",\"%s\",\"\",\"%d\",\"%s\",\"%s\",\"False\"\r\n", pTRIPSChunk->blockNumber, szServiceCode, seq, tempString, szarString); _lwrite(hfOutputFile, outputString, strlen(outputString)); seq++; } rcode2 = btrieve(B_GETNEXT, TMS_TRIPS, &TRIPS, &TRIPSKey2, 2); } // while blocks on this garage node // // Get the next garage node // if(bFirst) { bFirst = FALSE; } else { rcode2 = btrieve(B_GETNEXT, TMS_NODES, &NODES, &NODESKey1, 1); } } // while cycling through garage nodes // // Get the next service // rcode2 = btrieve(B_GETNEXT, TMS_SERVICES, &SERVICES, &SERVICESKey1, 1); } // // Get the next route // rcode2 = btrieve(B_GETNEXT, TMS_ROUTES, &ROUTES, &ROUTESKey1, 1); } // // Close the file // _lclose(hfOutputFile); // // All done // StatusBar(-1L, -1L); bFinishedOK = TRUE; done: chdir(".."); // Back to where we started from StatusBarEnd(); if(!bFinishedOK) { TMSError((HWND)NULL, MB_ICONINFORMATION, ERROR_227, (HANDLE)NULL); } if(bGotError) { TMSError((HWND)NULL, MB_ICONINFORMATION, ERROR_350, (HANDLE)NULL); } _lclose(hfErrorLog); distanceMeasure = distanceMeasureSave; recordLength[TMS_COMMENTS] = COMMENTS_FIXED_LENGTH; return(bFinishedOK); }
BOOL CDailyOpsAB::OnInitDialog() { CDialog::OnInitDialog(); HCURSOR hSaveCursor = SetCursor(hCursorWait); // // Set up the pointers to the controls // pListCtrlLIST = (CListCtrl *)GetDlgItem(DAILYOPSAB_LIST); pDTPickerDATE = (CDTPicker *)GetDlgItem(DAILYOPSAB_DATE); pButtonSHOWOFF = (CButton *)GetDlgItem(DAILYOPSAB_SHOWOFF); // // Set today's date on the Date and Time picker // COleVariant v; long year, month, day; if(m_Date == NO_RECORD) { CTime time = CTime::GetCurrentTime(); day = time.GetDay(); month = time.GetMonth(); year = time.GetYear(); } else { GetYMD(m_Date, &year, &month, &day); } v = year; pDTPickerDATE->SetYear(v); v = month; pDTPickerDATE->SetMonth(v); v = day; pDTPickerDATE->SetDay(v); // // Set up the list controls // DWORD dwExStyles = pListCtrlLIST->GetExtendedStyle(); pListCtrlLIST->SetExtendedStyle(dwExStyles | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP); LVCOLUMN LVC; LVC.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; LVC.cx = 128; LVC.fmt = LVCFMT_LEFT; LVC.pszText = "Entry Date/Time"; pListCtrlLIST->InsertColumn(0, &LVC); LVC.cx = 164; LVC.pszText = "Operator"; pListCtrlLIST->InsertColumn(1, &LVC); LVC.cx = 100; LVC.fmt = LVCFMT_LEFT; LVC.pszText = "Reason"; pListCtrlLIST->InsertColumn(2, &LVC); LVC.cx = 128; LVC.pszText = "From Date/Time"; pListCtrlLIST->InsertColumn(3, &LVC); LVC.cx = 128; LVC.pszText = "To Date/Time"; pListCtrlLIST->InsertColumn(4, &LVC); // // Default to showing drivers with the day off // pButtonSHOWOFF->SetCheck(TRUE); // // Set the date to force a refresh // OnChangeDate(); SetCursor(hSaveCursor); m_bInitializing = FALSE; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CDailyOpsAB::OnChangeDate() { // // Cycle through the entries for this operator // LVITEM LVI; CString s; CTime time = CTime::GetCurrentTime(); long thisDate; long startDate; long year, month, day; char lastName[DRIVERS_LASTNAME_LENGTH + 1]; char firstName[DRIVERS_FIRSTNAME_LENGTH + 1]; char badgeNumber[DRIVERS_BADGENUMBER_LENGTH + 1]; int iItem = 0; int rcode2; // // Clear the control // pListCtrlLIST->DeleteAllItems(); // // Get the date // // Date // COleVariant v; v = pDTPickerDATE->GetYear(); year = v.lVal; v = pDTPickerDATE->GetMonth(); month = v.lVal; v = pDTPickerDATE->GetDay(); day = v.lVal; // // Database verify 11-Jan-07 // thisDate = year * 10000 + month * 100 + day; startDate = (year - 1) * 10000 + month * 100 + day; DAILYOPSKey1.recordTypeFlag = DAILYOPS_FLAG_ABSENCE; DAILYOPSKey1.pertainsToDate = startDate; DAILYOPSKey1.pertainsToTime = NO_TIME; DAILYOPSKey1.recordFlags = 0; rcode2 = btrieve(B_GETGREATER, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1); while(rcode2 == 0 && (DAILYOPS.recordTypeFlag & DAILYOPS_FLAG_ABSENCE) && DAILYOPS.pertainsToDate <= thisDate) { if(thisDate >= DAILYOPS.pertainsToDate && thisDate <= DAILYOPS.DOPS.Absence.untilDate && (DAILYOPS.recordFlags & DAILYOPS_FLAG_ABSENCEREGISTER)) { if(!ANegatedRecord(DAILYOPS.recordID, 1)) { // // Date/time of entry // LVI.mask = LVIF_TEXT | LVIF_PARAM; LVI.iItem = iItem; LVI.iSubItem = 0; sprintf(tempString, "%s", ctime(&DAILYOPS.entryDateAndTime)); LVI.pszText = tempString; LVI.lParam = DAILYOPS.recordID; LVI.iItem = pListCtrlLIST->InsertItem(&LVI); // // Operator // LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 1; DRIVERSKey0.recordID = DAILYOPS.DRIVERSrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0); if(rcode2 != 0) { strcpy(tempString, "Driver not found"); } else { strncpy(badgeNumber, DRIVERS.badgeNumber, DRIVERS_BADGENUMBER_LENGTH); trim(badgeNumber, DRIVERS_BADGENUMBER_LENGTH); strncpy(lastName, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(lastName, DRIVERS_LASTNAME_LENGTH); strncpy(firstName, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(firstName, DRIVERS_FIRSTNAME_LENGTH); strcpy(tempString, badgeNumber); strcat(tempString, " - "); strcat(tempString, lastName); strcat(tempString, ", "); strcat(tempString, firstName); } LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // Reason // LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 2; if(DAILYOPS.DOPS.Absence.reasonIndex == NO_RECORD) { strcpy(tempString, "Assignment cleared manually"); } else { strcpy(tempString, m_AbsenceReasons[DAILYOPS.DOPS.Absence.reasonIndex].szText); } LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // From Date and time // GetYMD(DAILYOPS.pertainsToDate, &year, &month, &day); LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 3; sprintf(tempString, "%02ld-%s-%04ld at %s", day, szMonth[month - 1], year, Tchar(DAILYOPS.pertainsToTime)); LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // To Date and time // GetYMD(DAILYOPS.DOPS.Absence.untilDate, &year, &month, &day); LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 4; sprintf(tempString, "%02ld-%s-%04ld at %s", day, szMonth[month - 1], year, Tchar(DAILYOPS.DOPS.Absence.untilTime)); LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // Set up the next row // iItem++; } } rcode2 = btrieve(B_GETNEXT, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1); } // // Display operators with an off day? // if(m_bAutomatic || !pButtonSHOWOFF->GetCheck()) { return; } GetYMD(thisDate, &year, &month, &day); // // Get the list of drivers and assume they're not working // long DRIVERSrecordIDs[500]; int numDrivers = 0; rcode2 = btrieve(B_GETFIRST, TMS_DRIVERS, &DRIVERS, &DRIVERSKey2, 2); while(rcode2 == 0) { if(ConsideringThisDriverType(DRIVERS.DRIVERTYPESrecordID)) { DRIVERSrecordIDs[numDrivers] = DRIVERS.recordID; numDrivers++; } rcode2 = btrieve(B_GETNEXT, TMS_DRIVERS, &DRIVERS, &DRIVERSKey2, 2); } // // Eliminate those who are working sometime today // CTime workDate(year, month, day, 0, 0, 0); int nI, nJ; int indexToRoster[7] = {6, 0, 1, 2, 3, 4, 5}; int today = indexToRoster[workDate.GetDayOfWeek() - 1]; ROSTERKey1.DIVISIONSrecordID = m_DailyOpsROSTERDivisionInEffect; ROSTERKey1.rosterNumber = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1); while(rcode2 == 0 && ROSTER.DIVISIONSrecordID == m_DailyOpsROSTERDivisionInEffect) { if(ROSTER.DRIVERSrecordID != NO_RECORD && ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[today] != NO_RECORD) { for(nI = 0; nI < numDrivers; nI++) { if(DRIVERSrecordIDs[nI] != NO_RECORD) { if(ROSTER.DRIVERSrecordID == DRIVERSrecordIDs[nI]) { DRIVERSrecordIDs[nI] = NO_RECORD; break; } } } } rcode2 = btrieve(B_GETNEXT, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1); } // // Eliminate those that are already marked as absent // int numItems = pListCtrlLIST->GetItemCount(); for(nI = 0; nI < numItems; nI++) { // // Determine the operator // DAILYOPSKey0.recordID = pListCtrlLIST->GetItemData(nI); rcode2 = btrieve(B_GETEQUAL,TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey0, 0); if(rcode2 == 0) { for(nJ = 0; nJ < numDrivers; nJ++) { if(DRIVERSrecordIDs[nJ] != NO_RECORD) { if(DRIVERSrecordIDs[nJ] == DAILYOPS.DRIVERSrecordID) { DRIVERSrecordIDs[nJ] = NO_RECORD; break; } } } } } // // Spit out those that remain on the list // for(nI = 0; nI < numDrivers; nI++) { if(DRIVERSrecordIDs[nI] == NO_RECORD) { continue; } // // Date/time of entry // LVI.mask = LVIF_TEXT | LVIF_PARAM; LVI.iItem = iItem; LVI.iSubItem = 0; LVI.pszText = ""; LVI.lParam = NO_RECORD; LVI.iItem = pListCtrlLIST->InsertItem(&LVI); // // Operator // LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 1; DRIVERSKey0.recordID = DRIVERSrecordIDs[nI]; rcode2 = btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0); if(rcode2 != 0) { strcpy(tempString, "Driver not found"); } else { strncpy(badgeNumber, DRIVERS.badgeNumber, DRIVERS_BADGENUMBER_LENGTH); trim(badgeNumber, DRIVERS_BADGENUMBER_LENGTH); strncpy(lastName, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(lastName, DRIVERS_LASTNAME_LENGTH); strncpy(firstName, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(firstName, DRIVERS_FIRSTNAME_LENGTH); strcpy(tempString, badgeNumber); strcat(tempString, " - "); strcat(tempString, lastName); strcat(tempString, ", "); strcat(tempString, firstName); } LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // Reason // LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 2; strcpy(tempString, "Day Off"); LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // Set up the next row // iItem++; } }
void CDailyOpsHO::Display() { LVITEM LVI; BOOL bFound; int iItem = 0; int rcode2; long year, month, day; HCURSOR hSaveCursor = SetCursor(hCursorWait); pListCtrlLIST->DeleteAllItems(); DAILYOPSKey1.recordTypeFlag = (char)DAILYOPS_FLAG_DATE; DAILYOPSKey1.pertainsToDate = *m_pDate - 10000; DAILYOPSKey1.pertainsToTime = NO_TIME; DAILYOPSKey1.recordFlags = 0; rcode2 = btrieve(B_GETGREATER, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1); while(rcode2 == 0 && (DAILYOPS.recordTypeFlag & DAILYOPS_FLAG_DATE)) { bFound = FALSE; if(DAILYOPS.recordFlags & DAILYOPS_FLAG_DATESET) { if(!ANegatedRecord(DAILYOPS.recordID, 1)) { // // Pertains to date // GetYMD(DAILYOPS.pertainsToDate, &year, &month, &day); CTime t(year, month, day, 0, 0, 0); CString x = t.Format(_T("%A, %B %d, %Y")); LVI.mask = LVIF_TEXT | LVIF_PARAM; LVI.iItem = iItem; LVI.iSubItem = 0; sprintf(tempString, "%s", x); LVI.pszText = tempString; LVI.lParam = DAILYOPS.recordID; LVI.iItem = pListCtrlLIST->InsertItem(&LVI); // // Description // strncpy(tempString, DAILYOPS.DOPS.Date.name, DAILYOPS_DATENAME_LENGTH); trim(tempString, DAILYOPS_DATENAME_LENGTH); LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 1; LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // Service // SERVICESKey0.recordID = DAILYOPS.DOPS.Date.SERVICESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); if(rcode2 == 0) { strncpy(tempString, SERVICES.name, SERVICES_NAME_LENGTH); trim(tempString, SERVICES_NAME_LENGTH); } else { strcpy(tempString, "No Service"); } LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 2; LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // Set up the next row // iItem++; } } rcode2 = btrieve(B_GETNEXT, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1); } // // Disable Remove and Update 'till he picks something // pButtonIDREMOVE->EnableWindow(FALSE); pButtonIDUPDATE->EnableWindow(FALSE); }
BOOL FAR TMSRPT73(TMSRPTPassedDataDef *pPassedData) { CombinedDef Combined[TMSRPT73_MAXROUTES]; HFILE hfOutputFile; BOOL bKeepGoing = FALSE; BOOL bFound; char outputString[512]; long tempLong; long fromDate, toDate; long year, month,day; int nI; int nJ; int nK; int rcode2; int numCombined; pPassedData->nReportNumber = 72; pPassedData->numDataFiles = 1; // // See what he wants // if(!GetDateRange(&fromDate, &toDate)) { return(FALSE); } // // Open the output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\TMSRPT73.txt"); hfOutputFile = _lcreat(tempString, 0); if(hfOutputFile == HFILE_ERROR) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); // // Go through the audit trail to get the ridership numbers // StatusBarStart(hWndMain, "Unloading Ridership Data"); for(tempLong = fromDate; tempLong <= toDate; tempLong++) { if(StatusBarAbort()) { bKeepGoing = FALSE; goto deallocate; } for(nI = 0; nI < TMSRPT73_MAXROUTES; nI++) { Combined[nI].ROUTESrecordID = NO_RECORD; Combined[nI].RUNSrecordID = NO_RECORD; for(nJ = 0; nJ < 4; nJ++) { Combined[nI].numFares[nJ] = 0; Combined[nI].fareValue[nJ] = 0; } Combined[nI].mileageOut = 0.0; Combined[nI].mileageIn = 0.0; } numCombined = 0; DAILYOPSKey1.recordTypeFlag = DAILYOPS_FLAG_RIDERSHIP; DAILYOPSKey1.pertainsToDate = tempLong; DAILYOPSKey1.pertainsToTime = 0; DAILYOPSKey1.recordFlags = 0; bFound = FALSE; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1); while(rcode2 == 0 && (DAILYOPS.recordTypeFlag & DAILYOPS_FLAG_RIDERSHIP) && DAILYOPS.pertainsToDate == tempLong) { if(DAILYOPS.recordFlags & DAILYOPS_FLAG_SETRIDERSHIP) { if(!ANegatedRecord(DAILYOPS.recordID, 1)) { TRIPSKey0.recordID = DAILYOPS.DOPS.Ridership.R.TRIPSrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_TRIPS, &TRIPS, &TRIPSKey0, 0); for(nI = 0; nI < numCombined; nI++) { if(Combined[nI].ROUTESrecordID == TRIPS.ROUTESrecordID) { bFound = TRUE; break; } } if(!bFound) { nI = numCombined; Combined[nI].ROUTESrecordID = TRIPS.ROUTESrecordID; Combined[nI].RUNSrecordID = DAILYOPS.DOPS.Ridership.R.RUNSrecordID; numCombined++; } for(nJ = 0; nJ < 4; nJ++) { Combined[nI].numFares[nJ] += DAILYOPS.DOPS.Ridership.R.numFares[nJ]; } } } rcode2 = btrieve(B_GETNEXT, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1); } // // Get the fare values for each of the routes // for(nI = 0; nI < numCombined; nI++) { for(bFound = FALSE, nJ = 0; nJ < m_numFareTypesByRoute; nJ++) { if(Combined[nI].ROUTESrecordID == m_FareTypesByRoute[nJ].ROUTESrecordID) { bFound = TRUE; break; } } if(bFound) { for(nK = 0; nK < 4; nK++) { Combined[nI].fareValue[nK] = m_FareTypesByRoute[nJ].fareValue[nK]; } } } // // Get the mileage for this run // DAILYOPSKey1.recordTypeFlag = DAILYOPS_FLAG_RIDERSHIP; DAILYOPSKey1.pertainsToDate = tempLong; DAILYOPSKey1.pertainsToTime = 0; DAILYOPSKey1.recordFlags = 0; bFound = FALSE; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1); while(rcode2 == 0 && (DAILYOPS.recordTypeFlag & DAILYOPS_FLAG_RIDERSHIP) && DAILYOPS.pertainsToDate == tempLong) { if(DAILYOPS.recordFlags & DAILYOPS_FLAG_SETMILEAGE) { if(!ANegatedRecord(DAILYOPS.recordID, 1)) { for(nI = 0; nI < numCombined; nI++) { if(Combined[nI].RUNSrecordID == DAILYOPS.DOPS.Ridership.M.RUNSrecordID) { bFound = TRUE; break; } } if(bFound) { Combined[nI].mileageOut = DAILYOPS.DOPS.Ridership.M.mileageOut; Combined[nI].mileageIn = DAILYOPS.DOPS.Ridership.M.mileageIn; } } } rcode2 = btrieve(B_GETNEXT, TMS_DAILYOPS, &DAILYOPS, &DAILYOPSKey1, 1); } // // Loop through Combined // for(nI = 0; nI < numCombined; nI++) { // // Route number // ROUTESKey0.recordID = Combined[nI].ROUTESrecordID; rcode2 = btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); strncpy(tempString, ROUTES.number, ROUTES_NUMBER_LENGTH); trim(tempString, ROUTES_NUMBER_LENGTH); strcpy(outputString, tempString); strcat(outputString, "\t"); // // Route name // strncpy(tempString, ROUTES.name, ROUTES_NAME_LENGTH); trim(tempString, ROUTES_NAME_LENGTH); strcat(outputString, tempString); strcat(outputString, "\t"); // // Date // GetYMD(tempLong, &year, &month, &day); sprintf(tempString, "%02ld/%02ld/%ld", month, day, year); strcat(outputString, tempString); strcat(outputString, "\t"); // // Cash received // for(nJ = 0; nJ < 4; nJ++) { sprintf(tempString, "%6.02f", Combined[nI].numFares[nJ] * Combined[nI].fareValue[nJ]); strcat(outputString, tempString); strcat(outputString, "\t"); } // // Number of fares // for(nJ = 0; nJ < 4; nJ++) { sprintf(tempString, "%d", Combined[nI].numFares[nJ]); strcat(outputString, tempString); strcat(outputString, "\t"); } // // Mileage // sprintf(tempString, "%8.1f", Combined[nI].mileageOut); strcat(outputString, tempString); strcat(outputString, "\t"); sprintf(tempString, "%8.1f", Combined[nI].mileageIn); strcat(outputString, tempString); strcat(outputString, "\r\n"); // // Write it out // _lwrite(hfOutputFile, outputString, strlen(outputString)); } } // tempLong bKeepGoing = TRUE; // // Free allocated memory // deallocate: _lclose(hfOutputFile); StatusBarEnd(); if(!bKeepGoing) { return(FALSE); } // // All done // return(TRUE); }
BOOL FAR TMSRPT36(TMSRPTPassedDataDef *pPassedData) { TMSRPT36PassedDataDef TMSRPT36PassedData; HANDLE hOutputFile; DWORD dwBytesWritten; BOOL bRC; BOOL bKeepGoing; char *daysOfTheWeek[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; char outString[512]; char dummy[256]; long numTimechecks; long timechecksRead; long timeOfDay; long index; int year, month, day; int dayOfWeek; int rcode2; pPassedData->nReportNumber = 35; pPassedData->numDataFiles = 1; bRC = TMSRPT36Filter(&TMSRPT36PassedData); if(!bRC) return(FALSE); // // Open the output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\TMSRPT36.TXT"); hOutputFile = CreateFile(tempString, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hOutputFile == INVALID_HANDLE_VALUE) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } strcpy(pPassedData->szReportDataFile[0], tempString); // // Get the number of records in the TIMECHECKS file // rcode2 = btrieve(B_STAT, TMS_TIMECHECKS, &BSTAT, dummy, 0); if(rcode2 != 0 || BSTAT.numRecords == 0) { TMSError(NULL, MB_ICONSTOP, ERROR_313, (HANDLE)NULL); SendMessage(NULL, WM_COMMAND, MAKEWPARAM(IDCANCEL, 0), (LPARAM)0); goto deallocate; } numTimechecks = BSTAT.numRecords; // // Start the status bar // LoadString(hInst, TEXT_117, tempString, TEMPSTRING_LENGTH); StatusBarStart(hWndMain, tempString); // // Loop through the records // bKeepGoing = TRUE; TIMECHECKSKey1.checkDate = TMSRPT36PassedData.fromDate; timechecksRead = 0; rcode2 = btrieve(B_GETGREATEROREQUAL, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey1, 1); while(rcode2 == 0 && TIMECHECKS.checkDate >= TMSRPT36PassedData.fromDate && TIMECHECKS.checkDate <= TMSRPT36PassedData.toDate) { if(StatusBarAbort()) { bKeepGoing = FALSE; break; } StatusBar(timechecksRead, numTimechecks); // // Service // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLSERVICES || TMSRPT36PassedData.SERVICESrecordID == TIMECHECKS.SERVICESrecordID)) goto NextRecord; // // Route // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLROUTES || TMSRPT36PassedData.ROUTESrecordID == TIMECHECKS.ROUTESrecordID)) goto NextRecord; // // Direction // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_BOTHDIRECTIONS || TMSRPT36PassedData.directionIndex == TIMECHECKS.directionIndex)) goto NextRecord; // // Timepoint // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLTIMEPOINTS || TMSRPT36PassedData.NODESrecordID == TIMECHECKS.NODESrecordID)) goto NextRecord; // // Drivers // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLDRIVERS || TMSRPT36PassedData.DRIVERSrecordID == TIMECHECKS.actualDRIVERSrecordID)) goto NextRecord; // // Exclusions // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_DONOTEXCLUDE || TMSRPT36PassedData.excludedDRIVERSrecordID != TIMECHECKS.actualDRIVERSrecordID)) goto NextRecord; // // Bustypes // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLBUSTYPES || TMSRPT36PassedData.BUSTYPESrecordID == TIMECHECKS.actualBUSTYPESrecordID)) goto NextRecord; // // Passenger Load // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLPASSENGERLOADS || TMSRPT36PassedData.passengerLoadIndex == TIMECHECKS.passengerLoadIndex)) goto NextRecord; // // Road Supervisors // if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLROADSUPERVISORS || TMSRPT36PassedData.roadSupervisorIndex == TIMECHECKS.supervisorIndex)) goto NextRecord; // // Day of the week - moved here 'cause other, easier, conditions earlier. // dayOfWeek = GetDayFromDate(TIMECHECKS.checkDate); if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLSERVICEDAYS || TMSRPT36PassedData.dayNumber == dayOfWeek)) goto NextRecord; // // Time of day - moved here 'cause other, easier, conditions earlier. // If he passes this test, he's Jake. // timeOfDay = GetTimeAtNode(TIMECHECKS.TRIPSrecordID, TIMECHECKS.NODESrecordID, TIMECHECKS.nodePositionInTrip, (TRIPSDef *)NULL); if(!(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLDAY)) { timeOfDay = GetTimeAtNode(TIMECHECKS.TRIPSrecordID, TIMECHECKS.NODESrecordID, TIMECHECKS.nodePositionInTrip, (TRIPSDef *)NULL); if(timeOfDay < TMSRPT36PassedData.timeOfDayFrom || timeOfDay > TMSRPT36PassedData.timeOfDayTo) goto NextRecord; } // // Passed the tests - construct the output record // // Date // GetYMD(TIMECHECKS.checkDate, &year, &month, &day); sprintf(outString, "%04d/%02d/%02d\t", year, month, day); // // Service // SERVICESKey0.recordID = TIMECHECKS.SERVICESrecordID; btrieve(B_GETEQUAL, TMS_SERVICES, &SERVICES, &SERVICESKey0, 0); strncpy(szarString, SERVICES.name, SERVICES_NAME_LENGTH); trim(szarString, SERVICES_NAME_LENGTH); strcat(outString, szarString); strcat(outString, "\t"); // // Day of week // if(TMSRPT36PassedData.flags & TMSRPT36_FLAG_ALLSERVICEDAYS) dayOfWeek = GetDayFromDate(TIMECHECKS.checkDate); else dayOfWeek = TMSRPT36PassedData.dayNumber; strcat(outString, daysOfTheWeek[dayOfWeek - 1]); strcat(outString, "\t"); // // Scheduled time // sprintf(szarString, "%ld\t", timeOfDay); strcat(outString, szarString); // // Actual time // sprintf(szarString, "%ld\t", TIMECHECKS.actualTime); strcat(outString, szarString); // // Route // ROUTESKey0.recordID = TIMECHECKS.ROUTESrecordID; btrieve(B_GETEQUAL, TMS_ROUTES, &ROUTES, &ROUTESKey0, 0); strncpy(szarString, ROUTES.name, ROUTES_NAME_LENGTH); trim(szarString, ROUTES_NAME_LENGTH); strcat(outString, szarString); strcat(outString, "\t"); // // Timepoint // NODESKey0.recordID = TIMECHECKS.NODESrecordID; btrieve(B_GETEQUAL, TMS_NODES, &NODES, &NODESKey0, 0); strncpy(szarString, NODES.abbrName, NODES_ABBRNAME_LENGTH); trim(szarString, NODES_ABBRNAME_LENGTH); strcat(outString, szarString); strcat(outString, "\t"); // // Direction // DIRECTIONSKey0.recordID = ROUTES.DIRECTIONSrecordID[TIMECHECKS.directionIndex]; btrieve(B_GETEQUAL, TMS_DIRECTIONS, &DIRECTIONS, &DIRECTIONSKey0, 0); strncpy(szarString, DIRECTIONS.abbrName, DIRECTIONS_ABBRNAME_LENGTH); trim(szarString, DIRECTIONS_ABBRNAME_LENGTH); strcat(outString, szarString); strcat(outString, "\t"); // // Road Supervisor // if(TIMECHECKS.supervisorIndex >= 0 && TIMECHECKS.supervisorIndex < MAXROADSUPERVISORS) { strcat(outString, m_RoadSupervisors[TIMECHECKS.supervisorIndex].szText); } strcat(outString, "\t"); // // Driver // if(TIMECHECKS.actualDRIVERSrecordID != NO_RECORD) { DRIVERSKey0.recordID = TIMECHECKS.actualDRIVERSrecordID; btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0); strncpy(szarString, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(szarString, DRIVERS_LASTNAME_LENGTH); strcat(outString, szarString); strcat(outString, ", "); strncpy(szarString, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(szarString, DRIVERS_FIRSTNAME_LENGTH); strcat(outString, szarString); } strcat(outString, "\t"); // // Bustype // if(TIMECHECKS.actualBUSTYPESrecordID != NO_RECORD) { BUSTYPESKey0.recordID = TIMECHECKS.actualBUSTYPESrecordID; btrieve(B_GETEQUAL, TMS_BUSTYPES, &BUSTYPES, &BUSTYPESKey0, 0); strncpy(szarString, BUSTYPES.name, BUSTYPES_NAME_LENGTH); trim(szarString, BUSTYPES_NAME_LENGTH); strcat(outString,szarString); } strcat(outString, "\t"); // // Passenger Load // if(TIMECHECKS.passengerLoadIndex >= 0 && TIMECHECKS.passengerLoadIndex < MAXPASSENGERLOADS) { strcat(outString, m_PassengerLoads[TIMECHECKS.passengerLoadIndex].szText); } strcat(outString, "\t"); // // Weather // index = (long)LOWORD(TIMECHECKS.weatherIndex); if(index >= 0 && index < MAXWEATHERCONDITIONS) { strcat(outString, m_WeatherConditions[index].szText); } strcat(outString, "\t"); // // Traffic // index = (long)HIWORD(TIMECHECKS.weatherIndex); if(index >= 0 && index < MAXTRAFFICCONDITIONS) { strcat(outString, m_TrafficConditions[index].szText); } strcat(outString, "\t"); // // Other Comments // if(TIMECHECKS.otherCommentsIndex >= 0 && TIMECHECKS.otherCommentsIndex < MAXOTHERCOMMENTS) { strcat(outString, m_OtherComments[TIMECHECKS.otherCommentsIndex].szText); } strcat(outString, "\r\n"); // // Write it out // WriteFile(hOutputFile, (LPCVOID *)outString, strlen(outString), &dwBytesWritten, NULL); // // Get the next TIMECHECKS record // NextRecord: rcode2 = btrieve(B_GETNEXT, TMS_TIMECHECKS, &TIMECHECKS, &TIMECHECKSKey1, 1); timechecksRead++; } // while (through TIMECHECKS) // // Free allocated memory // deallocate: StatusBarEnd(); CloseHandle(hOutputFile); SetCursor(hCursorArrow); if(!bKeepGoing) return(FALSE); // // All done // return(TRUE); }
// // Discipline Report // // From QETXT.INI: // // [TMSRPT60] // FILE=TMSRPT60.txt // FLN=0 // TT=Tab // Charset=ANSI // DS=. // FIELD1=Date,VARCHAR,32,0,32,0, // FIELD2=Time,VARCHAR,32,0,32,0, // FIELD3=Sequence,NUMERIC,8,0,8,0, // FIELD4=Operator,VARCHAR,32,0,32,0, // FIELD5=Text,VARCHAR,256,0,256,0, // BOOL FAR TMSRPT60(TMSRPTPassedDataDef *pPassedData) { DISCIPLINEFILTERSELECTIONSDef DisciplineSelections; HANDLE hOutputFile = NULL; DWORD dwBytesWritten; BOOL bKeepGoing = FALSE; BOOL bRC; char outputString[512]; char szDriver[DRIVERS_LASTNAME_LENGTH + 2 + DRIVERS_FIRSTNAME_LENGTH + 1]; long year, month, day; long DRIVERSrecordID; long seq; long category; long type; long action; int rcode2; int nI; pPassedData->nReportNumber = 59; pPassedData->numDataFiles = 1; DRIVERSrecordID = pPassedData->DRIVERSrecordID; // // See what's to be filtered // bRC = DisciplineFilter(&DisciplineSelections); if(bRC != IDOK) { goto deallocate; } // // Open the output file // strcpy(tempString, szReportsTempFolder); strcat(tempString, "\\TMSRPT60.txt"); hOutputFile = CreateFile(tempString, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hOutputFile == INVALID_HANDLE_VALUE) { LoadString(hInst, ERROR_202, szFormatString, sizeof(szFormatString)); sprintf(szarString, szFormatString, tempString); MessageBeep(MB_ICONSTOP); MessageBox((HWND)NULL, szarString, TMS, MB_ICONSTOP); goto deallocate; } StatusBarStart(hWndMain, "Processing selections..."); StatusBar(-1L, -1L); bKeepGoing = TRUE; // // Set up the driver // DRIVERSKey0.recordID = DRIVERSrecordID; btrieve(B_GETEQUAL, TMS_DRIVERS, &DRIVERS, &DRIVERSKey0, 0); strncpy(tempString, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(tempString, DRIVERS_LASTNAME_LENGTH); strcpy(szDriver, tempString); strcat(szDriver, ", "); strncpy(tempString, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(tempString, DRIVERS_FIRSTNAME_LENGTH); strcat(szDriver, tempString); // // Set up the flags for retrieval // DISCIPLINEKey1.DRIVERSrecordID = DRIVERSrecordID; DISCIPLINEKey1.dateOfOffense = DisciplineSelections.fromDate; DISCIPLINEKey1.timeOfOffense = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_DISCIPLINE, &DISCIPLINE, &DISCIPLINEKey1, 1); seq = 0; while(rcode2 == 0 && DISCIPLINE.DRIVERSrecordID == DRIVERSrecordID) { if(DISCIPLINE.dateOfOffense > DisciplineSelections.toDate) { break; } category = DISCIPLINE.violationCategory; type = DISCIPLINE.violationType; action = DISCIPLINE.actionTaken; // // Category // if(category != NO_RECORD) { GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\tCategory: "); strcat(outputString, m_ViolationCategories[category]); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // // Type // if(category != NO_RECORD && type != NO_RECORD) { GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t Type: "); strcat(outputString, m_Violations[category][type].text); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); // // Action // sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t Action: "); if(action == NO_RECORD) { strcat(outputString, " None taken."); } else { strcat(outputString, m_ViolationActions[action]); } strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // // Comments // GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t Notes: "); strncpy(tempString, DISCIPLINE.comments, DISCIPLINE_COMMENTS_LENGTH); trim(tempString, DISCIPLINE_COMMENTS_LENGTH); for(nI = 0; nI < (int)strlen(tempString); nI++) { if(tempString[nI] == 13) { tempString[nI ] = ' '; tempString[nI + 1] = ' '; break; } } strcat(outputString, tempString); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); // // Suspended // if(DISCIPLINE.suspensionDate > 0) { // // Date, time, sequence, driver // GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t"); GetYMD(DISCIPLINE.suspensionDate, &year, &month, &day); sprintf(tempString, "Suspension date: %02ld-%s-%04ld", day, szMonth[month - 1], year); strcat(outputString, tempString); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); sprintf(tempString, "Suspension duration: %5.2f", DISCIPLINE.suspensionDuration); GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t"); sprintf(tempString, "Suspension duration: %5.2f\r\n", DISCIPLINE.suspensionDuration); strcat(outputString, tempString); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); } // // Dropoff date // GetYMD(DISCIPLINE.dateOfOffense, &year, &month, &day); sprintf(outputString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, Tchar(DISCIPLINE.timeOfOffense)); strcat(outputString, "\t"); sprintf(tempString, "%ld\t", seq++); strcat(outputString, tempString); strcat(outputString, szDriver); strcat(outputString, "\t Dropoff: "); GetYMD(DISCIPLINE.dropoffDate, &year, &month, &day); sprintf(tempString, "%02ld-%s-%04ld\t", day, szMonth[month - 1], year); strcat(outputString, tempString); strcat(outputString, "\r\n"); WriteFile(hOutputFile, (LPCVOID *)outputString, strlen(outputString), &dwBytesWritten, NULL); // // Get the next record // rcode2 = btrieve(B_GETNEXT, TMS_DISCIPLINE, &DISCIPLINE, &DISCIPLINEKey1, 1); } // // Free allocated memory // deallocate: StatusBarEnd(); if(hOutputFile != NULL) { CloseHandle(hOutputFile); } SetCursor(hCursorArrow); return(bKeepGoing); }
BOOL CCustomerComment::OnInitDialog() { CDialog::OnInitDialog(); pGroupBoxTRACKINGNUMBER = GetDlgItem(CC_TRACKINGNUMBER); pStaticRECEIVEDBY = (CStatic *)GetDlgItem(CC_RECEIVEDBY); pButtonIDUPDATECUSTOMER = (CButton *)GetDlgItem(IDUPDATECUSTOMER); pButtonIDFIND = (CButton *)GetDlgItem(IDFIND); pStaticNAME = (CStatic *)GetDlgItem(CC_NAME); pStaticADDRESS = (CStatic *)GetDlgItem(CC_ADDRESS); pStaticCITYSTATE = (CStatic *)GetDlgItem(CC_CITYSTATE); pStaticZIP = (CStatic *)GetDlgItem(CC_ZIP); pStaticDAYPHONE = (CStatic *)GetDlgItem(CC_DAYPHONE); pStaticNIGHTPHONE = (CStatic *)GetDlgItem(CC_NIGHTPHONE); pStaticFAX = (CStatic *)GetDlgItem(CC_FAX); pStaticEMAIL = (CStatic *)GetDlgItem(CC_EMAIL); pButtonHISTORYNO = (CButton *)GetDlgItem(CC_HISTORYNO); pButtonHISTORYYES = (CButton *)GetDlgItem(CC_HISTORYYES); pStaticHISTORYHOWMANYTIMES = (CStatic *)GetDlgItem(CC_HISTORYHOWMANYTIMES); pButtonHISTORYNOTSURE = (CButton *)GetDlgItem(CC_HISTORYNOTSURE); pButtonHISTORYTHISMANY = (CButton *)GetDlgItem(CC_HISTORYTHISMANY); pEditHISTORYTHISMANYNUMBER = (CEdit *)GetDlgItem(CC_HISTORYTHISMANYNUMBER); pDTPickerDETAILDATE = (CDTPicker *)GetDlgItem(CC_DETAILDATE); pDTPickerDETAILTIME = (CDTPicker *)GetDlgItem(CC_DETAILTIME); pEditVEHICLENUMBER = (CEdit *)GetDlgItem(CC_VEHICLENUMBER); pEditLOCATION = (CEdit *)GetDlgItem(CC_LOCATION); pComboBoxROUTE = (CComboBox *)GetDlgItem(CC_ROUTE); pStaticDIRECTION_TEXT = (CStatic *)GetDlgItem(CC_DIRECTION_TEXT); pButtonNADIRECTION = (CButton *)GetDlgItem(CC_NADIRECTION); pButtonOUTBOUND = (CButton *)GetDlgItem(CC_OUTBOUND); pButtonINBOUND = (CButton *)GetDlgItem(CC_INBOUND); pComboBoxWEATHER = (CComboBox *)GetDlgItem(CC_WEATHER); pButtonEMPLOYEEMALE = (CButton *)GetDlgItem(CC_EMPLOYEEMALE); pButtonEMPLOYEEFEMALE = (CButton *)GetDlgItem(CC_EMPLOYEEFEMALE); pButtonNAEMPLOYEE = (CButton *)GetDlgItem(CC_NAEMPLOYEE); pComboBoxEMPLOYEENAME = (CComboBox *)GetDlgItem(CC_EMPLOYEENAME); pEditEMPLOYEEDESCRIPTION = (CEdit *)GetDlgItem(CC_EMPLOYEEDESCRIPTION); pButtonNASPEEDING = (CButton *)GetDlgItem(CC_NASPEEDING); pButtonSPEEDINGNO = (CButton *)GetDlgItem(CC_SPEEDINGNO); pButtonSPEEDINGYES = (CButton *)GetDlgItem(CC_SPEEDINGYES); pEditSPEED = (CEdit *)GetDlgItem(CC_SPEED); pButtonNAATTENTION = (CButton *)GetDlgItem(CC_NAATTENTION); pButtonATTENTIONNO = (CButton *)GetDlgItem(CC_ATTENTIONNO); pButtonATTENTIONYES = (CButton *)GetDlgItem(CC_ATTENTIONYES); pButtonNATIMEDIFFERENCE = (CButton *)GetDlgItem(CC_NATIMEDIFFERENCE); pButtonLESSTHANTWO = (CButton *)GetDlgItem(CC_LESSTHANTWO); pButtonTWOTOFIVE = (CButton *)GetDlgItem(CC_TWOTOFIVE); pButtonMORETHANFIVE = (CButton *)GetDlgItem(CC_MORETHANFIVE); COleVariant v; char szDriver[DRIVERS_LASTNAME_LENGTH + 2 + DRIVERS_FIRSTNAME_LENGTH + 1]; long flags; int nI, nJ; int numDrivers; int numRoutes; int rcode2; long day; long month; long year; long hours; long minutes; long seconds; // // Set up the title bar // GetWindowText(szFormatString, sizeof(szFormatString)); strncpy(szarString, m_pCCFE->COMPLAINTS.referenceNumber, COMPLAINTS_REFERENCENUMBER_LENGTH); trim(szarString, COMPLAINTS_REFERENCENUMBER_LENGTH); sprintf(tempString, szFormatString, szarString); SetWindowText(tempString); // // Put up the nature of the call // if(m_pCCFE->flags & CCFE_FLAGS_NEW) flags = m_pCCFE->flags; else { COMPLAINTSKey0.recordID = m_pCCFE->COMPLAINTS.recordID; flags = m_pCCFE->COMPLAINTS.flags; GetYMD(m_pCCFE->COMPLAINTS.dateOfComplaint, &year, &month, &day); GetHMS(m_pCCFE->COMPLAINTS.timeOfComplaint, &hours, &minutes, &seconds); strncpy(tempString, m_pCCFE->COMPLAINTS.enteredBy, COMPLAINTS_ENTEREDBY_LENGTH); trim(tempString, COMPLAINTS_ENTEREDBY_LENGTH); } // // Set up "received by" // pStaticRECEIVEDBY->GetWindowText(szFormatString, sizeof(szFormatString)); if(flags & CCFE_FLAGS_NEW) { if(flags & CCFE_FLAGS_COMPLAINT) nI = TEXT_156; else if(flags & CCFE_FLAGS_COMMENDATION) nI = TEXT_157; else if(flags & CCFE_FLAGS_SERVICEREQUEST) nI = TEXT_158; else if(flags & CCFE_FLAGS_MISCELLANEOUS) nI = TEXT_401; } else { if(m_pCCFE->COMPLAINTS.referenceNumber[0] == 'C') nI = TEXT_156; else if(m_pCCFE->COMPLAINTS.referenceNumber[0] == 'M') nI = TEXT_157; else if(m_pCCFE->COMPLAINTS.referenceNumber[0] == 'S') nI = TEXT_158; else if(m_pCCFE->COMPLAINTS.referenceNumber[0] == 'L') nI = TEXT_401; } CString s; s.LoadString(nI); if(m_pCCFE->flags & CCFE_FLAGS_NEW) { sprintf(szarString, szFormatString, s, m_pCCFE->szDateTime, m_pCCFE->szReceivedBy); } else { CTime time(year, month, day, hours, minutes, seconds); sprintf(szarString, szFormatString, s, time.Format(_T("%A, %B %d, %Y at %I:%M:%S%p")), tempString); } pStaticRECEIVEDBY->SetWindowText(szarString); // // If this is a new complaint or an anonymous complaintant, disable // button until he's selected one through the Find or New buttons // if(m_pCCFE->COMPLAINTS.CUSTOMERSrecordID == NO_RECORD) pButtonIDUPDATECUSTOMER->EnableWindow(FALSE); // // Load the drivers // // Set the first driver to "Not known or N/A" // s.LoadString(TEXT_238); numDrivers = pComboBoxEMPLOYEENAME->AddString(s); pComboBoxEMPLOYEENAME->SetItemData(numDrivers, NO_RECORD); rcode2 = btrieve(B_GETFIRST, TMS_DRIVERS, &DRIVERS, &DRIVERSKey1, 1); while(rcode2 == 0) { strncpy(tempString, DRIVERS.lastName, DRIVERS_LASTNAME_LENGTH); trim(tempString, DRIVERS_LASTNAME_LENGTH); strcpy(szDriver, tempString); strcat(szDriver, ", "); strncpy(tempString, DRIVERS.firstName, DRIVERS_FIRSTNAME_LENGTH); trim(tempString, DRIVERS_FIRSTNAME_LENGTH); strcat(szDriver, tempString); numDrivers = pComboBoxEMPLOYEENAME->AddString(szDriver); if(numDrivers != CB_ERR) pComboBoxEMPLOYEENAME->SetItemData(numDrivers, DRIVERS.recordID); rcode2 = btrieve(B_GETNEXT, TMS_DRIVERS, &DRIVERS, &DRIVERSKey1, 1); } pComboBoxEMPLOYEENAME->SetCurSel(0); // // Set up the route list // numRoutes = SetUpRouteList(m_hWnd, CC_ROUTE, NO_RECORD); if(numRoutes == 0) { CDialog::OnCancel(); return TRUE; } // // Set the first route to "Not known or N/A" // s.LoadString(TEXT_238); nI = pComboBoxROUTE->InsertString(0, s); pComboBoxROUTE->SetItemData(nI, NO_RECORD); pComboBoxROUTE->SetCurSel(0); // // Set up the weather conditions // if(m_numWeatherConditions == 0) { pComboBoxWEATHER->EnableWindow(FALSE); } else { for(nI = 0; nI < m_numWeatherConditions; nI++) { nJ = pComboBoxWEATHER->AddString(m_WeatherConditions[nI].szText); pComboBoxWEATHER->SetItemData(nJ, m_WeatherConditions[nI].number); } } // // New complaints: // if(m_pCCFE->flags & CCFE_FLAGS_NEW) { // // And no customer yet // m_customerRecordID = NO_RECORD; // // Are there any customers // rcode2 = btrieve(B_GETFIRST, TMS_CUSTOMERS, &CUSTOMERS, &CUSTOMERSKey0, 0); if(rcode2 != 0) pButtonIDFIND->EnableWindow(FALSE); // // No route selected yet // pStaticDIRECTION_TEXT->EnableWindow(FALSE); pButtonNADIRECTION->EnableWindow(FALSE); pButtonOUTBOUND->EnableWindow(FALSE); pButtonINBOUND->EnableWindow(FALSE); // // Set today's date on the Date and Time picker // CTime time = CTime::GetCurrentTime(); day = time.GetDay(); month = time.GetMonth(); year = time.GetYear(); v = year; pDTPickerDETAILDATE->SetYear(v); v = month; pDTPickerDETAILDATE->SetMonth(v); v = day; pDTPickerDETAILDATE->SetDay(v); // // Default to "No History" // pButtonHISTORYNO->SetCheck(TRUE); OnHistoryno(); // // Default weather conditions to "N/A" // pComboBoxWEATHER->SetCurSel(0); // // Default employee sex to "N/A or unknown" // pButtonNAEMPLOYEE->SetCheck(TRUE); // // Default "Driver speeding" to "N/A" // pButtonNASPEEDING->SetCheck(TRUE); OnNaspeeding(); // // Default "Driver's attention" to "N/A" // pButtonNAATTENTION->SetCheck(TRUE); // // Default "Customer time difference" to "N/A" // pButtonNATIMEDIFFERENCE->SetCheck(TRUE); } // // Existing complaint - fill in the controls // else { m_customerRecordID = m_pCCFE->COMPLAINTS.CUSTOMERSrecordID; // // Customer data // PopulateCustomerFields(); // // History // if(!(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_FILEDPREVIOUS)) pButtonHISTORYNO->SetCheck(TRUE); else { pButtonHISTORYYES->SetCheck(TRUE); if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_NOTSUREHOWMANY) pButtonHISTORYNOTSURE->SetCheck(TRUE); else { pButtonHISTORYTHISMANY->SetCheck(TRUE); ltoa(m_pCCFE->COMPLAINTS.numberOfPreviousComplaints, tempString, 10); pEditHISTORYTHISMANYNUMBER->SetWindowText(tempString); } } // // Date and time of occurrence // // Date // if(m_pCCFE->COMPLAINTS.dateOfOccurrence == 0) { TMSError(this->m_hWnd, MB_ICONINFORMATION | MB_OK, TEXT_377, (HANDLE)NULL); } else { GetYMD(m_pCCFE->COMPLAINTS.dateOfOccurrence, &year, &month, &day); v = year; pDTPickerDETAILDATE->SetYear(v); v = month; pDTPickerDETAILDATE->SetMonth(v); v = day; pDTPickerDETAILDATE->SetDay(v); // // Time // GetHMS(m_pCCFE->COMPLAINTS.timeOfOccurrence, &hours, &minutes, &seconds); v = hours; pDTPickerDETAILTIME->SetHour(v); v = minutes; pDTPickerDETAILTIME->SetMinute(v); v = seconds; pDTPickerDETAILTIME->SetSecond(v); } // // Vehicle number // strncpy(tempString, m_pCCFE->COMPLAINTS.busNumber, COMPLAINTS_BUSNUMBER_LENGTH); trim(tempString, COMPLAINTS_BUSNUMBER_LENGTH); pEditVEHICLENUMBER->SetWindowText(tempString); // // Location // strncpy(tempString, m_pCCFE->COMPLAINTS.location, COMPLAINTS_LOCATION_LENGTH); trim(tempString, COMPLAINTS_LOCATION_LENGTH); pEditLOCATION->SetWindowText(tempString); // // Route // long ROUTESrecordID = NO_RECORD; for(nI = 0; nI < numRoutes + 1; nI++) // +1 'cause "N/A" is the first route { ROUTESrecordID = pComboBoxROUTE->GetItemData(nI); if(ROUTESrecordID == m_pCCFE->COMPLAINTS.ROUTESrecordID) { pComboBoxROUTE->SetCurSel(nI); OnSelchangeRoute(); pButtonNADIRECTION->SetCheck(FALSE); break; } } // // Direction // if(m_pCCFE->COMPLAINTS.directionIndex == NO_RECORD) pButtonNADIRECTION->SetCheck(TRUE); else if(m_pCCFE->COMPLAINTS.directionIndex == 0) pButtonOUTBOUND->SetCheck(TRUE); else pButtonINBOUND->SetCheck(TRUE); // // Weather index // if(m_pCCFE->COMPLAINTS.weatherIndex != NO_RECORD) pComboBoxWEATHER->SetCurSel(m_pCCFE->COMPLAINTS.weatherIndex); // // Driver sex // if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_NOTSUREDRIVERSEX) pButtonNAEMPLOYEE->SetCheck(TRUE); else if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_DRIVERMALE) pButtonEMPLOYEEMALE->SetCheck(TRUE); else pButtonEMPLOYEEFEMALE->SetCheck(TRUE); // // Driver name // long DRIVERSrecordID = NO_RECORD; for(nI = 0; nI < numDrivers; nI++) { DRIVERSrecordID = pComboBoxEMPLOYEENAME->GetItemData(nI); if(m_pCCFE->COMPLAINTS.DRIVERSrecordID == DRIVERSrecordID) { pComboBoxEMPLOYEENAME->SetCurSel(nI); break; } } // // Driver description // strncpy(tempString, m_pCCFE->COMPLAINTS.driverDescription, COMPLAINTS_DRIVERDESCRIPTION_LENGTH); trim(tempString, COMPLAINTS_DRIVERDESCRIPTION_LENGTH); pEditEMPLOYEEDESCRIPTION->SetWindowText(tempString); // // Speeding // if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_NASPEEDING) pButtonNASPEEDING->SetCheck(TRUE); else if(!(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_DRIVERSPEEDINGYES)) pButtonSPEEDINGNO->SetCheck(TRUE); else { pButtonSPEEDINGYES->SetCheck(TRUE); ltoa(m_pCCFE->COMPLAINTS.driverSpeed, tempString, 10); pEditSPEED->SetWindowText(tempString); } // // Driver's attention // if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_NAATTENTION) pButtonNAATTENTION->SetCheck(TRUE); else if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_ATTENTIONYES) pButtonATTENTIONYES->SetCheck(TRUE); else pButtonATTENTIONNO->SetCheck(TRUE); // // Time difference // if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_LESSTHANTWO) pButtonLESSTHANTWO->SetCheck(TRUE); else if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_TWOTOFIVE) pButtonTWOTOFIVE->SetCheck(TRUE); else if(m_pCCFE->COMPLAINTS.flags & COMPLAINTS_FLAG_MORETHANFIVE) pButtonMORETHANFIVE->SetCheck(TRUE); else pButtonNATIMEDIFFERENCE->SetCheck(TRUE); } // // Make sure there's no junk in any new text entry // strcpy(m_newEntry, ""); // // All done // return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
BOOL CSuggestSuspension::OnInitDialog() { CDialog::OnInitDialog(); // // Set up pointers to the controls // pListCtrlLIST = (CListCtrl *)GetDlgItem(SUGGESTSUSPENSION_LIST); DWORD dwExStyles = pListCtrlLIST->GetExtendedStyle(); pListCtrlLIST->SetExtendedStyle(dwExStyles | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP); // // Show the hourgalss // HCURSOR hSaveCursor = SetCursor(hCursorWait); // // Set up the columns on the list control // // // Set up the list controls // LVCOLUMN LVC; LVC.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; LVC.cx = 120; LVC.fmt = LVCFMT_CENTER; LVC.pszText = "Date"; pListCtrlLIST->InsertColumn(0, &LVC); LVC.cx = 60; LVC.pszText = "Run #"; pListCtrlLIST->InsertColumn(1, &LVC); LVC.cx = 60; LVC.pszText = "On at"; pListCtrlLIST->InsertColumn(2, &LVC); LVC.cx = 60; LVC.pszText = "Off at"; pListCtrlLIST->InsertColumn(3, &LVC); LVC.cx = 60; LVC.pszText = "Pay"; pListCtrlLIST->InsertColumn(4, &LVC); // // Get his data from the roster // typedef struct RosterPayStruct { int num; long RUNSrecordIDs[10]; long runNumber[10]; long onTime[10]; long offTime[10]; long payTime[10]; long flags[10]; } RosterPayDef; RosterPayDef RD[7]; int nI, nJ; for(nI = 0; nI < 7; nI++) { RD[nI].num = 0; } int rcode2; ROSTERKey1.DIVISIONSrecordID = m_DivisionRecordID; ROSTERKey1.rosterNumber = NO_RECORD; rcode2 = btrieve(B_GETGREATER, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1); while(rcode2 == 0 && ROSTER.DIVISIONSrecordID == m_DivisionRecordID) { if(ROSTER.DRIVERSrecordID == *m_pDRIVERSrecordID) { for(nI = 0; nI < 7; nI++) { if(ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[nI] == NO_RECORD) { continue; } nJ = RD[nI].num; RD[nI].RUNSrecordIDs[nJ] = ROSTER.WEEK[m_RosterWeek].RUNSrecordIDs[nI]; RD[nI].flags[nJ] = ROSTER.WEEK[m_RosterWeek].flags; RD[nI].num++; } } rcode2 = btrieve(B_GETNEXT, TMS_ROSTER, &ROSTER, &ROSTERKey1, 1); } // // Fill up the rest of the structure with run details // PROPOSEDRUNDef PROPOSEDRUN; COSTDef COST; int numPieces; for(nI = 0; nI < 7; nI++) { for(nJ = 0; nJ < RD[nI].num; nJ++) { RUNSKey0.recordID = RD[nI].RUNSrecordIDs[nJ]; btrieve(B_GETEQUAL, TMS_RUNS, &RUNS, &RUNSKey0, 0); btrieve(B_GETPOSITION, TMS_RUNS, &RUNS, &RUNSKey0, 0); btrieve(B_GETDIRECT, TMS_RUNS, &RUNS, &RUNSKey1, 1); RD[nI].runNumber[nJ] = RUNS.runNumber; numPieces = GetRunElements(hWndMain, &RUNS, &PROPOSEDRUN, &COST, TRUE); RD[nI].onTime[nJ] = RUNSVIEW[0].runOnTime; RD[nI].offTime[nJ] = RUNSVIEW[numPieces - 1].runOffTime; RD[nI].payTime[nJ] = COST.TOTAL.payTime; } } // // Start with today // long yyyy, mm, dd; int indexToRoster[7] = {6, 0, 1, 2, 3, 4, 5}; CTime firstDay = CTime::GetCurrentTime(); long day = firstDay.GetDay(); long month = firstDay.GetMonth(); long year = firstDay.GetYear(); long fDay = year * 10000 + month * 100 + day; // // End with the "until date" on this pick // GetYMD(untilDate, &yyyy, &mm, &dd); CTime lastDay(yyyy, mm, dd, 0, 0, 0); // // Go through the assignments for each day // CTime currentDate = firstDay; currentDate -= CTimeSpan(1, 0, 0, 0); // // Display up until the untilDate // LVITEM LVI; int iItem; CString s; int today; for(;;) { currentDate += CTimeSpan(1, 0, 0, 0); day = currentDate.GetDay(); month = currentDate.GetMonth(); year = currentDate.GetYear(); LVI.lParam = year * 10000 + month * 100 + day; if(LVI.lParam > untilDate) { break; } today = indexToRoster[currentDate.GetDayOfWeek() - 1]; s = currentDate.Format(_T("%d-%b-%Y (%a)")); // // Cycle through the number of Roster entries for today (typically 1) // for(nI = 0; nI < RD[today].num; nI++) { // // Output the date // strcpy(tempString, s); if(IsHeAwayToday(LVI.lParam)) { strcat(tempString, " *"); } iItem = pListCtrlLIST->GetItemCount(); LVI.mask = LVIF_TEXT | LVIF_PARAM; LVI.iItem = iItem; LVI.iSubItem = 0; LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->InsertItem(&LVI); // // Run number // sprintf(tempString, "%ld", RD[today].runNumber[nI]); LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 1; LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // On time // strcpy(tempString, Tchar(RD[today].onTime[nI])); LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 2; LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // Off time // strcpy(tempString, Tchar(RD[today].offTime[nI])); LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 3; LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); // // Pay time // strcpy(tempString, chhmm(RD[today].payTime[nI])); LVI.mask = LVIF_TEXT; LVI.iItem = iItem; LVI.iSubItem = 4; LVI.pszText = tempString; LVI.iItem = pListCtrlLIST->SetItem(&LVI); } } // // Restore the cursor // SetCursor(hSaveCursor); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }