{"version":3,"file":"main-es2015.js","mappings":"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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvSA;;;;;;;;;;ACAA","sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./src/app/_helpers/auth.guard.ts","./src/app/_helpers/http-error-interceptor.ts","./src/app/_helpers/jwtinterceptor.ts","./src/app/_models/apioperation-result.ts","./src/app/_models/delete-date-range-model.ts","./src/app/_models/export-request.ts","./src/app/_models/injection-data-batch.ts","./src/app/_models/injection-data-record.ts","./src/app/_models/injection-pressure-data-record.ts","./src/app/_models/mass-email-args.ts","./src/app/_models/new-user-request-model.ts","./src/app/_models/reset-password-args.ts","./src/app/_models/time-span.ts","./src/app/_models/user-prefs-exchange-model.ts","./src/app/_models/user-prefs-model.ts","./src/app/_models/user-submittable-data-batch.ts","./src/app/_models/user-submittable-data-record.ts","./src/app/_models/users-filter-model.ts","./src/app/_models/validate-email-request-args.ts","./src/app/_models/wells-list-filter-model.ts","./src/app/_services/assets.service.ts","./src/app/_services/authentication.service.ts","./src/app/_services/bhp.service.ts","./src/app/_services/browse-injection-layer.service.ts","./src/app/_services/browse-map-image-service-layer.service.ts","./src/app/_services/config.service.ts","./src/app/_services/excel-import.service.ts","./src/app/_services/export-injection-pressure-manager.service.ts","./src/app/_services/export-manager.service.ts","./src/app/_services/formation.service.ts","./src/app/_services/injection.service.ts","./src/app/_services/mass-email.service.ts","./src/app/_services/operator.service.ts","./src/app/_services/user-account.service.ts","./src/app/_services/user-operators-edit.service.ts","./src/app/_services/user-submittable-service.ts","./src/app/add-bhp/add-bhp.component.ts","./src/app/add-injection2-monthly/add-injection2-monthly.component.ts","./src/app/add-injection2/add-injection2.component.ts","./src/app/add-user/add-user.component.ts","./src/app/admin-cp/admin-cp.component.ts","./src/app/admin-edit-user/admin-edit-user.component.ts","./src/app/api-docs/api-docs.component.ts","./src/app/api-result-error-dialog/api-result-error-dialog.component.ts","./src/app/app.component.ts","./src/app/app.module.ts","./src/app/approver-confirm/approver-confirm.component.ts","./src/app/approver-cp/approver-cp.component.ts","./src/app/base-date-range-selector/base-date-range-selector.component.ts","./src/app/bhp-data-grid/bhp-data-grid.component.ts","./src/app/bhp-dialog/bhp-dialog.component.ts","./src/app/bhp-period-method-selector/bhp-period-method-selector.component.ts","./src/app/bhp-presubmit-data-table/bhp-presubmit-data-table.component.ts","./src/app/browse-card/browse-card.component.ts","./src/app/browse-view/browse-view.component.ts","./src/app/browse-well-details/browse-well-details.component.ts","./src/app/confirm-dialog/confirm-dialog.component.ts","./src/app/daily-date-range-selector/daily-date-range-selector.component.ts","./src/app/delete-injection-dialog/delete-injection-dialog.component.ts","./src/app/edit-formations-dialog/edit-formations-dialog.component.ts","./src/app/error-dialog/error-dialog.component.ts","./src/app/export-date-range-selector/export-date-range-selector.component.ts","./src/app/export-in-progress-dialog/export-in-progress-dialog.component.ts","./src/app/faq/faq.component.ts","./src/app/filter.pipe.ts","./src/app/fluid-fraction-form/fluid-fraction-form.component.ts","./src/app/help/help.component.ts","./src/app/home/home.component.ts","./src/app/import-excel-data/import-excel-data.component.ts","./src/app/injection-composition-data-grid/injection-composition-data-grid.component.ts","./src/app/injection-data-grid2/injection-data-grid2.component.ts","./src/app/injection-data-list/injection-data-list.component.ts","./src/app/injection-density-data-grid/injection-density-data-grid.component.ts","./src/app/injection-formations-editor/injection-formations-editor.component.ts","./src/app/injection-graph/injection-graph.component.ts","./src/app/injection-interval-data-grid/injection-interval-data-grid.component.ts","./src/app/injection-pressure-data-grid/injection-pressure-data-grid.component.ts","./src/app/injection-pressure-record-editor/injection-pressure-record-editor.component.ts","./src/app/injection-presubmit-data-table/injection-presubmit-data-table.component.ts","./src/app/injection-record-editor/injection-record-editor.component.ts","./src/app/loading-dialog/loading-dialog.component.ts","./src/app/login/login.component.ts","./src/app/message-dialog/message-dialog.component.ts","./src/app/monthly-date-range-selector/monthly-date-range-selector.component.ts","./src/app/nav-menu/nav-menu.component.ts","./src/app/other-data-form/other-data-form.component.ts","./src/app/register/register.component.ts","./src/app/reset-password/reset-password.component.ts","./src/app/select-period-dialog/select-period-dialog.component.ts","./src/app/sideload-injection/sideload-injection.component.ts","./src/app/user-confirm/user-confirm.component.ts","./src/app/user-settings/user-settings.component.ts","./src/app/user-submittable-data-grid/user-submittable-data-grid.component.ts","./src/app/user-wells.service.ts","./src/app/validation-failure-reasons-display/validation-failure-reasons-display.component.ts","./src/app/welcome-dialog/welcome-dialog.component.ts","./src/app/well-details-display/well-details-display.component.ts","./src/app/well-details/well-details.component.ts","./src/app/well-lookup/well-lookup.component.ts","./src/environments/environment.ts","./src/main.ts","./src/app/add-bhp/add-bhp.component.html","./src/app/add-injection2-monthly/add-injection2-monthly.component.html","./src/app/add-injection2/add-injection2.component.html","./src/app/add-user/add-user.component.html","./src/app/admin-cp/admin-cp.component.html","./src/app/admin-edit-user/admin-edit-user.component.html","./src/app/api-docs/api-docs.component.html","./src/app/api-result-error-dialog/api-result-error-dialog.component.html","./src/app/app.component.html","./src/app/approver-confirm/approver-confirm.component.html","./src/app/approver-cp/approver-cp.component.html","./src/app/base-date-range-selector/base-date-range-selector.component.html","./src/app/bhp-data-grid/bhp-data-grid.component.html","./src/app/bhp-dialog/bhp-dialog.component.html","./src/app/bhp-period-method-selector/bhp-period-method-selector.component.html","./src/app/bhp-presubmit-data-table/bhp-presubmit-data-table.component.html","./src/app/browse-card/browse-card.component.html","./src/app/browse-view/browse-view.component.html","./src/app/browse-well-details/browse-well-details.component.html","./src/app/confirm-dialog/confirm-dialog.component.html","./src/app/daily-date-range-selector/daily-date-range-selector.component.html","./src/app/delete-injection-dialog/delete-injection-dialog.component.html","./src/app/edit-formations-dialog/edit-formations-dialog.component.html","./src/app/error-dialog/error-dialog.component.html","./src/app/export-date-range-selector/export-date-range-selector.component.html","./src/app/export-in-progress-dialog/export-in-progress-dialog.component.html","./src/app/faq/faq.component.html","./src/app/fluid-fraction-form/fluid-fraction-form.component.html","./src/app/help/help.component.html","./src/app/home/home.component.html","./src/app/import-excel-data/import-excel-data.component.html","./src/app/injection-composition-data-grid/injection-composition-data-grid.component.html","./src/app/injection-data-grid2/injection-data-grid2.component.html","./src/app/injection-data-list/injection-data-list.component.html","./src/app/injection-density-data-grid/injection-density-data-grid.component.html","./src/app/injection-formations-editor/injection-formations-editor.component.html","./src/app/injection-graph/injection-graph.component.html","./src/app/injection-interval-data-grid/injection-interval-data-grid.component.html","./src/app/injection-pressure-data-grid/injection-pressure-data-grid.component.html","./src/app/injection-pressure-record-editor/injection-pressure-record-editor.component.html","./src/app/injection-presubmit-data-table/injection-presubmit-data-table.component.html","./src/app/injection-record-editor/injection-record-editor.component.html","./src/app/loading-dialog/loading-dialog.component.html","./src/app/login/login.component.html","./src/app/message-dialog/message-dialog.component.html","./src/app/monthly-date-range-selector/monthly-date-range-selector.component.html","./src/app/nav-menu/nav-menu.component.html","./src/app/other-data-form/other-data-form.component.html","./src/app/register/register.component.html","./src/app/reset-password/reset-password.component.html","./src/app/select-period-dialog/select-period-dialog.component.html","./src/app/sideload-injection/sideload-injection.component.html","./src/app/user-confirm/user-confirm.component.html","./src/app/user-settings/user-settings.component.html","./src/app/user-submittable-data-grid/user-submittable-data-grid.component.html","./src/app/validation-failure-reasons-display/validation-failure-reasons-display.component.html","./src/app/welcome-dialog/welcome-dialog.component.html","./src/app/well-details-display/well-details-display.component.html","./src/app/well-details/well-details.component.html","./src/app/well-lookup/well-lookup.component.html","./node_modules/@stencil/core/internal/client|lazy|/^/.*/.entry/.js.*$/|include: /.entry/.js$/|exclude: /.system/.entry/.js$/|groupOptions: {}|namespace object","./node_modules/moment/locale|sync|/^/.*$","ignored|C:\\Users\\averetta\\source\\repos\\TexnetDisposal\\Disposal\\ClientApp\\node_modules\\xlsx-js-style\\dist|fs","ignored|C:\\Users\\averetta\\source\\repos\\TexnetDisposal\\Disposal\\ClientApp\\node_modules\\xlsx-js-style\\dist|stream"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 98255;\nmodule.exports = webpackEmptyAsyncContext;","import { Injectable } from '@angular/core';\r\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, ActivatedRoute } from '@angular/router';\r\n\r\nimport { AuthenticationService } from '../_services/authentication.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthGuard implements CanActivate {\r\n\r\n constructor(\r\n private router: Router,\r\n private authenticationService: AuthenticationService\r\n ) {\r\n\r\n }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n\r\n const user = this.authenticationService.currentUserSubject.value;\r\n\r\n if (user) {\r\n //Check if the desired route is restricted by role and whether the user's role \r\n if (route.data.Roles && route.data.roles.indexOf(user.Role) === -1) {\r\n this.router.navigate(['/']);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n //If we struck out, clear the current user, and then navigate to the login page\r\n this.authenticationService.logout();\r\n\r\n this.router.navigate(['/login'], {\r\n queryParams: {\r\n returnUrl: state.url\r\n }\r\n });\r\n\r\n return false;\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\nimport { AuthenticationService } from '../_services/authentication.service';\r\n\r\n//The function of this class is to examine HTTP request responses and reroute the application to the login page if we had a 401, which means our JWT token has expired.\r\n\r\n@Injectable()\r\nexport class HttpErrorInterceptor implements HttpInterceptor {\r\n\r\n constructor(private authenticationService: AuthenticationService) {\r\n\r\n }\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n return next.handle(request).pipe(catchError(err => {\r\n if (err.status === 401) {\r\n\r\n //If we got a 401, we log out the user.\r\n this.authenticationService.logout();\r\n location.reload();\r\n }\r\n const error = err.error.message || err.statusText;\r\n return throwError(error);\r\n }));\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { AuthenticationService } from '../_services/authentication.service'\r\n\r\n@Injectable()\r\nexport class JWTInterceptor implements HttpInterceptor {\r\n constructor(private authenticationService: AuthenticationService) {\r\n\r\n }\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n let currentUser = this.authenticationService.currentUserSubject.value;\r\n\r\n if (currentUser && currentUser.Token) {\r\n request = request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${currentUser.Token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(request);\r\n }\r\n}\r\n","export class APIOperationResult {\r\n public Success: boolean = false;\r\n public Reasons: Array = new Array();\r\n public Duplicate: boolean = false;\r\n}\r\n","export class DeleteDateRangeModel {\n \n public beginYear: number;\n public beginMonth: number;\n public beginDay: number;\n\n public endYear: number;\n public endMonth: number;\n public endDay: number;\n\n public wellId: number;\n}\n","export class ExportRequest {\r\n public Format: string;\r\n public BeginYear: number;\r\n public BeginMonth: number;\r\n public EndYear: number;\r\n public EndMonth: number;\r\n public EndDate: Date;\r\n public WellIds: Array;\r\n}\r\n","import { UserSubmittableDataBatch } from './user-submittable-data-batch';\r\nimport { InjectionDataRecord } from \"./injection-data-record\";\r\n\r\nexport class InjectionDataBatch extends UserSubmittableDataBatch {\r\n\r\n}\r\n","\r\nimport { UserSubmittableDataRecord } from './user-submittable-data-record';\r\n\r\nexport class InjectionDataRecord extends UserSubmittableDataRecord {\r\n InjectionDate: Date;\r\n InjectionPressureAveragePsig: number;\r\n InjectionPressureMaxPsig: number;\r\n VolumeInjectedBbl: number;\r\n TotalGasVolumeMcf: number;\r\n AnnulusPressureNumReadings: number;\r\n AnnulusPressureMinPsig: number;\r\n AnnulusPressureMaxPsig: number;\r\n CurrentInjectionIntervalTop: number;\r\n CurrentInjectionIntervalBottom: number;\r\n Formation: number;\r\n DepthTubingPacker: number;\r\n InjectedFluidsOtherSources: boolean;\r\n InjectionThrough: string;\r\n FractionSaltWater: number;\r\n FractionFreshWater: number;\r\n FractionFractureWaterFlowBack: number;\r\n FractionNorm: number;\r\n FractionCo2: number;\r\n FractionNaturalGas: number;\r\n FractionH2s: number;\r\n FractionPolymer: number;\r\n FractionSteam: number;\r\n FractionAir: number;\r\n FractionNitrogen: number;\r\n FractionOther: number;\r\n OtherDesc: string;\r\n InjectionEndDate: Date;\r\n DateRowAdded: Date;\r\n MaxDayInjGasRate: number;\r\n MaxDayInjLiqRate: number;\r\n\r\n public get EndDate() {\r\n\r\n var startDate : Date = new Date(this.InjectionDate);\r\n\r\n startDate.setMonth(startDate.getMonth() + 1);\r\n\r\n return startDate;\r\n }\r\n\r\n FormationIds: Array;\r\n\r\n}\r\n","export class InjectionPressureDataRecord {\n public Id: number;\n public WellId: number;\n public MeasurementDate: Date;\n\n public ShutinBHPDaily: number;\n public ShutinBHPQuarterlyCalc: number;\n public ShutinBHPQuarterlyMeas: number;\n\n public TvdDepBHPSensor: number;\n public MeaDayInjLiqDens: number;\n public AveDayMeasBHP: number;\n public MaxDayMeasBHP: number;\n public AveDayEstBHP: number;\n public MaxDayEstBHP: number;\n public StaticDayMeasSurfPress: number;\n public ShutinTimeForStaticPress: number;\n public DateRowAdded: Date;\n}\n","export class MassEmailArgs {\n public ReturnAddress: string;\n public Subject: string;\n public Body: string;\n}\n","export class NewUserRequestModel {\r\n public email: string;\r\n public password: string;\r\n public firstName: string;\r\n public lastName: string;\r\n public phone: string;\r\n public operators: Array = new Array();\r\n}\r\n","export class ResetPasswordArgs {\r\n public emailAddress: string;\r\n}\r\n","export class TimeSpan {\r\n public startDate: Date;\r\n public endDate: Date;\r\n\r\n constructor(startDate: Date, endDate: Date) {\r\n this.startDate = startDate;\r\n this.endDate = endDate;\r\n }\r\n\r\n public Contained(otherTs: TimeSpan) {\r\n var ret = false;\r\n\r\n var thisStartTime = this.startDate.getTime();\r\n var thisEndTime = this.endDate.getTime();\r\n\r\n var otherStartTime = otherTs.startDate.getTime();\r\n var otherEndTime = otherTs.endDate.getTime();\r\n\r\n if (thisStartTime >= otherStartTime && thisEndTime <= otherEndTime) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n public Contains(otherTs: TimeSpan) {\r\n var ret = false;\r\n\r\n var thisStartTime = this.startDate.getTime();\r\n var thisEndTime = this.endDate.getTime();\r\n\r\n var otherStartTime = otherTs.startDate.getTime();\r\n var otherEndTime = otherTs.endDate.getTime();\r\n\r\n if (thisStartTime <= otherStartTime && thisEndTime >= otherEndTime) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n public OverlapBeginning(otherTs: TimeSpan) {\r\n var ret = false;\r\n\r\n var thisStartTime = this.startDate.getTime();\r\n var thisEndTime = this.endDate.getTime();\r\n\r\n var otherStartTime = otherTs.startDate.getTime();\r\n\r\n if (thisStartTime <= otherStartTime && thisEndTime >= otherStartTime) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n public OverlapEnd(otherTs: TimeSpan) {\r\n\r\n var ret = false;\r\n\r\n var thisStartTime = this.startDate.getTime();\r\n var thisEndTime = this.endDate.getTime();\r\n\r\n var otherEndTime = otherTs.endDate.getTime();\r\n\r\n if (thisStartTime <= otherEndTime && thisEndTime >= otherEndTime) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n public Intersect(otherTs: TimeSpan) {\r\n\r\n var ret = false;\r\n\r\n if (this.OverlapBeginning(otherTs)) { //The other starts during our time span\r\n ret = true;\r\n }\r\n else if (this.OverlapEnd(otherTs)) { //The other ends during our time span\r\n ret = true;\r\n }\r\n else if (this.Contained(otherTs)) { //Our span occurs totally inside this other span\r\n ret = true;\r\n }\r\n else if (this.Contains(otherTs)) { //The other span occurs totally inside our span\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n }\r\n}\r\n","export class UserPrefsExchangeModel {\n public SerializedUserPrefs: string;\n}\n","export class UserPrefsModel {\n public FavoriteWellIds: Array = new Array();\n\n constructor() {\n this.FavoriteWellIds = new Array();\r\n }\n}\n","import { UserSubmittableDataRecord } from './user-submittable-data-record';\n\nexport class UserSubmittableDataBatch {\n public wellId: number;\n public submitMode: string;\n public Injections: Array = new Array();\n}\n","\nexport class UserSubmittableDataRecord {\n Id: number;\n WellId: number;\n}\n","export class UsersFilterModel {\n public FirstName: string;\n public LastName: string;\n public Email: string;\n}\n","export class ValidateEmailRequestArgs {\r\n public email: string = \"\";\r\n}\r\n","export class WellsListFilterModel {\r\n public Apinumber: string = \"\";\r\n public Uicnumber: string = \"\";\r\n public LeaseName: string = \"\";\r\n public WellNumber: string = \"\";\r\n public OperatorOperatorName: string = \"\";\r\n public ExcludeZeroInjections: Boolean = false;\r\n public ShowFavorites: Boolean = false;\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AssetsService {\r\n\r\n\r\n\r\n constructor(public http: HttpClient) {\r\n }\r\n\r\n public getAssetAsJson(assetPath: string): Promise {\r\n var prom = new Promise((resolve, reject) => {\r\n\r\n //Request the asset from the server.\r\n this.http.get(assetPath).subscribe((result: any) => {\r\n resolve(result);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n public getAssetAsString(assetPath: string): Promise {\r\n var prom = new Promise((resolve, reject) => {\r\n\r\n //Request the asset from the server.\r\n this.http.get(assetPath, {\r\n responseType: \"text\"\r\n }).subscribe((result: any) => {\r\n resolve(result);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { User } from '../_models/user';\r\nimport { map } from 'rxjs/operators';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { environment } from '../../environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthenticationService {\r\n\r\n public currentUserSubject: BehaviorSubject = new BehaviorSubject(null);\r\n public currentUser: Observable;\r\n\r\n public logout(): any {\r\n this.currentUserSubject.next(null);\r\n localStorage.removeItem(\"currentUser\");\r\n }\r\n\r\n public login(username: string, password: string) {\r\n return this.http.post(`${environment.apiUrl}/Users/Authenticate`, { username, password }).pipe(map(user => {\r\n localStorage.setItem('currentUser', JSON.stringify(user));\r\n\r\n this.currentUserSubject.next(user);\r\n return user;\r\n }));\r\n\r\n }\r\n\r\n constructor(private http: HttpClient) {\r\n var currentUser: User = JSON.parse(localStorage.getItem('currentUser'));\r\n\r\n if (currentUser != null) {\r\n this.currentUserSubject.next(currentUser);\r\n }\r\n }\r\n}\r\n","import { Injectable, EventEmitter } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Subject, BehaviorSubject, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\nimport { UserSubmittableService } from './user-submittable-service';\r\n\r\nimport { InjectionPressureDataBatch } from '../_models/injection-pressure-data-batch';\r\nimport { InjectionPressureDataRecord } from '../_models/injection-pressure-data-record';\r\nimport { UserSubmittableDataBatch } from '../_models/user-submittable-data-batch';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BHPService extends UserSubmittableService {\r\n\r\n public currentRecords: EventEmitter> = new EventEmitter>(null);\r\n public getInjectionPressureDataWorking: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n public currentInjectionPressureBatch: BehaviorSubject = new BehaviorSubject(null);\r\n public currentInjectionPressureRecords: EventEmitter> = new EventEmitter>(null);\r\n\r\n\r\n //This one is the first page - injection volumes\r\n public bhpDataColumns;\r\n constructor(public httpClient: HttpClient)\r\n {\r\n super(httpClient);\r\n\r\n this._controllerName = \"injectionpressure\"\r\n }\r\n\r\n public GetInjectionPressureData(wellId: number) {\r\n\r\n if (!this.getInjectionPressureDataWorking.value) {\r\n\r\n var tempInjRecs = new Array();\r\n\r\n this.currentRecords.next(tempInjRecs);\r\n\r\n this.getInjectionPressureDataWorking.next(true);\r\n\r\n this.httpClient.get(\"api/injectionpressure/well/\" + wellId).subscribe((result: Array) => {\r\n\r\n this.getInjectionPressureDataWorking.next(false);\r\n this.currentRecords.emit(result);\r\n });\r\n }\r\n }\r\n\r\n public GetLastInjectionRecordWithWellId(wellId: number): Promise {\r\n\r\n var ret;\r\n\r\n if (wellId == null) {\r\n ret = new Promise((resolve, reject) => {\r\n resolve(null);\r\n });\r\n }\r\n else {\r\n ret = >this.httpClient.get(\"api/injectionpressure/LastInjectionWithWellId/\" + wellId).toPromise();\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n public getDataColumnsListPromise() {\r\n //If data columns dont exist make call to backend service\r\n if (!this.bhpDataColumns) {\r\n return this.httpClient.get(\"api/injectionpressure/Columns\").toPromise().then((result: any) => {\r\n this.bhpDataColumns = result.bhpDataColumns;\r\n return [this.bhpDataColumns];\r\n });\r\n } else {\r\n return Promise.resolve([this.bhpDataColumns]);\r\n }\r\n }\r\n\r\n public async getCombinedDataColumnsList(methodId = null) {\r\n let labelList = [];\r\n let dataColumnObjs = await this.getDataColumnsListPromise();\r\n\r\n //If methodId is proveded, set the necessary required fields.\r\n if (methodId) {\r\n dataColumnObjs = [this.updateDataColumnsByMeasurementMethod(this.bhpDataColumns, methodId)];\r\n } else {\r\n dataColumnObjs = [this.bhpDataColumns];\r\n }\r\n\r\n //interate over all dataColumns add all labels to an array\r\n dataColumnObjs.forEach(dataColumnObj => {\r\n Object.keys(dataColumnObj).forEach(key => {\r\n\r\n var labelProps = {\r\n key,\r\n label: dataColumnObj[key].label,\r\n required: dataColumnObj[key].required,\r\n persist: dataColumnObj[key].persist,\r\n type: \"number\",\r\n options: null\r\n };\r\n\r\n //Don't assign undefined to this\r\n if (dataColumnObj[key].type != null) {\r\n labelProps.type = dataColumnObj[key].type;\r\n\r\n //Also check if the type happens to be of the many to many type, and if so, set the options property.\r\n labelProps.options = dataColumnObj[key].options;\r\n }\r\n\r\n labelList.push(labelProps);\r\n });\r\n });\r\n\r\n return labelList;\r\n }\r\n\r\n public async GetPersistList() {\r\n let combinedDataColumnsList = await this.getCombinedDataColumnsList();\r\n return combinedDataColumnsList.filter(dataColumnObj => {\r\n return dataColumnObj.persist;\r\n }).map(dataColumnObj => {\r\n return dataColumnObj.key\r\n });\r\n }\r\n\r\n public updateDataColumnsByMeasurementMethod(dataCol, methodId) {\r\n // unrequire and enable all cols\r\n dataCol.ShutinBHPQuarterlyCalc.required = false;\r\n dataCol.ShutinBHPQuarterlyMeas.required = false;\r\n dataCol.ShutinBHPDaily.required = false;\r\n\r\n dataCol.ShutinBHPQuarterlyCalc.disabled = false;\r\n dataCol.ShutinBHPQuarterlyMeas.disabled = false;\r\n dataCol.ShutinBHPDaily.disabled = false;\r\n\r\n if (methodId == 1) {\r\n dataCol.ShutinBHPQuarterlyCalc.required = true;\r\n\r\n dataCol.ShutinBHPQuarterlyMeas.disabled = true;\r\n dataCol.ShutinBHPDaily.disabled = true;\r\n\r\n dataCol.MeaDayInjLiqDens.disabled = true;\r\n dataCol.MaxDayEstBhp.disabled = false;\r\n dataCol.AveDayEstBhp.disabled = false;\r\n dataCol.AveDayMeasBhp.disabled = true;\r\n dataCol.MaxDayMeasBhp.disabled = true;\r\n \r\n dataCol.ShutinTimeForStaticPress.required = true;\r\n dataCol.ShutinTimeForStaticPress.disabled = false;\r\n }\r\n else if (methodId == 2) {\r\n dataCol.ShutinBHPQuarterlyMeas.required = true;\r\n\r\n dataCol.ShutinBHPQuarterlyCalc.disabled = true;\r\n dataCol.ShutinBHPDaily.disabled = true;\r\n\r\n dataCol.MeaDayInjLiqDens.disabled = true;\r\n dataCol.MaxDayEstBhp.disabled = true;\r\n dataCol.AveDayEstBhp.disabled = true;\r\n dataCol.AveDayMeasBhp.disabled = false;\r\n dataCol.MaxDayMeasBhp.disabled = false;\r\n\r\n dataCol.ShutinTimeForStaticPress.required = true;\r\n dataCol.ShutinTimeForStaticPress.disabled = false;\r\n }\r\n else if (methodId == 3) {\r\n dataCol.ShutinBHPDaily.required = true;\r\n\r\n dataCol.ShutinBHPQuarterlyCalc.disabled = true;\r\n dataCol.ShutinBHPQuarterlyMeas.disabled = true;\r\n\r\n dataCol.MaxDayEstBhp.disabled = true;\r\n dataCol.AveDayEstBhp.disabled = true;\r\n dataCol.AveDayMeasBhp.disabled = false;\r\n dataCol.MaxDayMeasBhp.disabled = false;\r\n\r\n dataCol.ShutinTimeForStaticPress.required = false;\r\n dataCol.ShutinTimeForStaticPress.disabled = true;\r\n }\r\n\r\n return dataCol;\r\n }\r\n\r\n public GetEmptyDailySubmittableBatch(wellId: number, beginDate: Date, endDate: Date, useLastSubmission: boolean) {\r\n\r\n let lBeginDate = beginDate.getTime() / 1000;\r\n let lEndDate = endDate.getTime() / 1000;\r\n\r\n let tzo = beginDate.getTimezoneOffset();\r\n\r\n let tzoms = tzo * 60.0;\r\n\r\n let lBeginDateActuallyUtc = this.convertToActuallyUTC(beginDate, 12, 0, 0).getTime() / 1000;\r\n let lEndDateActuallyUtc = this.convertToActuallyUTC(endDate, 12, 0, 0).getTime() / 1000;\r\n\r\n let suls = \"false\";\r\n\r\n if (useLastSubmission == true) {\r\n suls = \"true\";\r\n }\r\n\r\n let url = \"api/\" + this._controllerName + \"/Empty?wellId=\" + wellId + \"&begin=\" + lBeginDateActuallyUtc + \"&end=\" + lEndDateActuallyUtc + \"&useLastSubmission=\" + suls;\r\n\r\n this.httpClient.get(url).pipe(catchError(this.handleSubmitBatchError)).subscribe(async (result: UserSubmittableDataBatch) => {\r\n\r\n let injBatch = result;\r\n let persistList = await this.GetPersistList();\r\n //add metadata values to persistList\r\n persistList = persistList.concat(['MeasurementDate', 'Id', 'WellId']);\r\n result.Injections = result.Injections.map(inj => {\r\n for (let key in inj) {\r\n //clear values that are not on the persist list.\r\n if (!persistList.includes(key)) {\r\n inj[key] = '';\r\n }\r\n }\r\n return inj;\r\n });\r\n\r\n this.currentBatch.next(injBatch);\r\n },\r\n (result) => {\r\n\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport FeatureLayer from '@arcgis/core/layers/FeatureLayer';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BrowseInjectionLayerService {\r\n\r\n public currentLayer: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n constructor() {\r\n var currentLayer = new FeatureLayer({\r\n url: \"https://maps.texnet.beg.utexas.edu/arcgis/rest/services/injection/Injection/MapServer/1\"\r\n });\r\n\r\n //We're not adding this layer to a view, so we need to tell it to go ahead and load whatever it needs.\r\n currentLayer.load();\r\n\r\n this.currentLayer.next(currentLayer);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport MapImageLayer from '@arcgis/core/layers/MapImageLayer';\r\nimport Sublayer from '@arcgis/core/layers/support/Sublayer';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ConfigService } from './config.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BrowseMapImageServiceLayerService {\r\n\r\n private wellLayerId: number = 0;\r\n private injectionTableId: number = 1;\r\n\r\n public currentMapImageService: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n public currentWellLayer: BehaviorSubject = new BehaviorSubject(null);\r\n public currentInjectionTable: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n constructor(public configService: ConfigService)\r\n {\r\n this.configService.configState.subscribe((newConfigState: any) => {\r\n this.init(newConfigState);\r\n });\r\n }\r\n\r\n protected init(configState: any) {\r\n\r\n if(configState != null && configState.wellsLayerUrl != null) {\r\n var imageLayer = new MapImageLayer({\r\n title: \"TexNet Disposal Data\",\r\n url: configState.wellsLayerUrl,\r\n useViewTime: true\r\n });\r\n\r\n this.currentMapImageService.next(imageLayer);\r\n\r\n this.currentMapImageService.subscribe((imgLyr: MapImageLayer) => {\r\n\r\n imgLyr.when((il) => { \r\n imgLyr.sublayers.forEach((sl) => {\r\n if (sl.id == this.wellLayerId) {\r\n this.currentWellLayer.next(sl);\r\n }\r\n\r\n if (sl.id == this.injectionTableId) {\r\n this.currentInjectionTable.next(sl);\r\n }\r\n });\r\n });\r\n }); \r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { AssetsService } from './assets.service';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService {\n\n public configState: BehaviorSubject = new BehaviorSubject(null);\n\n constructor(public assetsService: AssetsService) {\n this.assetsService.getAssetAsJson(\"api/Config\").then(\n (configState) => {\n this.configState.next(configState);\r\n },\n () => {\n this.configState.next(null);\r\n });\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { InjectionDataBatch } from '../_models/injection-data-batch';\r\nimport { InjectionDataModel } from '../_models/injection-data-model';\r\nimport * as XLSX from 'xlsx-js-style';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { InjectionPressureDataRecord } from '../_models/injection-pressure-data-record';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExcelImportService {\r\n\r\n public currentExcelTemplateData: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n private currentDataColumnsObj: any\r\n\r\n constructor() { }\r\n\r\n parseExcel = function (filePath) {\r\n\r\n var ret = new Promise((resolve, reject) => {\r\n var reader = new FileReader();\r\n\r\n var result = {\r\n\r\n };\r\n\r\n reader.onload = function (e) {\r\n var data = e.target.result;\r\n var workbook = XLSX.read(data, {\r\n type: 'binary'\r\n });\r\n\r\n workbook.SheetNames.forEach((sn) => {\r\n var json_object = XLSX.utils.sheet_to_json(workbook.Sheets[sn]);\r\n\r\n if (result[sn] == undefined || result[sn] == null) {\r\n result[sn] = [];\r\n }\r\n\r\n result[sn] = json_object;\r\n });\r\n\r\n resolve(result);\r\n };\r\n\r\n reader.onerror = function (ex) {\r\n\r\n };\r\n\r\n reader.readAsBinaryString(filePath)\r\n });\r\n\r\n return ret;\r\n }\r\n\r\n protected ExcelContentsToInjectionBatch(excelContents: any): InjectionDataBatch {\r\n var ret = new InjectionDataBatch();\r\n\r\n var h10Sheet = excelContents.Sheet1;\r\n\r\n var wellId = null;\r\n\r\n for (var i = 0; i < h10Sheet.length; i++) {\r\n\r\n var injRec;\r\n\r\n if (this.currentDataColumnsObj.controllerName == 'injection') {\r\n injRec = new InjectionDataRecord();\r\n }\r\n\r\n if (this.currentDataColumnsObj.controllerName == 'injectionPressure') {\r\n injRec = new InjectionPressureDataRecord();\r\n }\r\n\r\n var h10Row = h10Sheet[i];\r\n\r\n if (h10Row[\"BEGWellId\"] != null) {\r\n wellId = h10Row[\"BEGWellId\"];\r\n }\r\n\r\n injRec.WellId = wellId;\r\n this.currentDataColumnsObj.dataColumnsList.forEach(dataColumn => {\r\n injRec[dataColumn.key] = h10Row[dataColumn.label];\r\n });\r\n\r\n var date = new Date('' + h10Row[\"Date\"]);\r\n var endDate = new Date('' + h10Row[\"EndDate\"]);\r\n\r\n if (this.currentDataColumnsObj.controllerName == 'injection') {\r\n injRec.InjectionDate = date;\r\n injRec.InjectionEndDate = endDate;\r\n }\r\n\r\n if (this.currentDataColumnsObj.controllerName == 'injectionPressure') {\r\n injRec.MeasurementDate = date;\r\n }\r\n\r\n if (this.isValidDate(date) && this.isValidDate(endDate)) {\r\n ret.Injections.push(injRec);\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n protected isValidDate(date) {\r\n\r\n var ret = false;\r\n\r\n if (Object.prototype.toString.call(date) === \"[object Date]\") {\r\n // it is a date\r\n if (isNaN(date)) { // d.getTime() or d.valueOf() will also work\r\n // date object is not valid\r\n } else {\r\n // date object is valid\r\n ret = true;\r\n }\r\n } else {\r\n // not a date object\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n public ImportExcelTemplateData(filePath: string, dataColumnsObj) {\r\n this.currentDataColumnsObj = dataColumnsObj;\r\n this.parseExcel(filePath).then((result) => {\r\n //Do something with the result.\r\n var injBatch;\r\n injBatch = this.ExcelContentsToInjectionBatch(result);\r\n\r\n this.currentExcelTemplateData.next(injBatch);\r\n \r\n },\r\n (err) => {\r\n });\r\n }\r\n\r\n //Generates an empty excel template to ease data entry for the user.\r\n public generateTemplate(wellDetails: WellDetailsModel, beginDate: Date, endDate: Date, dateMode: string, tableName: string, dataColumnslist: any[], combinedDataForms: any[]) {\r\n\r\n function formatDate(date) {\r\n let d = new Date(date);\r\n let month = '' + (d.getMonth() + 1);\r\n let day = '' + d.getDate();\r\n let year = '' + d.getFullYear();\r\n\r\n if (month.length < 2)\r\n month = '0' + month;\r\n if (day.length < 2)\r\n day = '0' + day;\r\n\r\n return [month, day, year].join('/');\r\n }\r\n\r\n var beginDateString = formatDate(beginDate);\r\n var endDateString = formatDate(endDate);\r\n var uic = wellDetails.Uicnumber;\r\n\r\n var finalFilename = tableName + \"_\" + uic + \"_\" + beginDateString + \"_\" + endDateString + \"_\" + dateMode + \".xlsx\";\r\n\r\n var workbook = XLSX.utils.book_new();\r\n\r\n var data = [];\r\n\r\n var curdate = new Date(beginDate);\r\n var firstRecord = true;\r\n var index = 0;\r\n while (index < combinedDataForms.length) {\r\n\r\n var curEndDate = null;\r\n\r\n if (dateMode == \"monthly\") {\r\n curEndDate = new Date(curdate);\r\n curEndDate.setMonth(curEndDate.getMonth() + 1);\r\n curEndDate.setDate(0);\r\n }\r\n else if (dateMode == \"daily\") {\r\n curEndDate = new Date(curdate);\r\n }\r\n\r\n var record = {};\r\n\r\n //Fill in the well header columns for every well, not just the first one.\r\n record[\"UIC Number\"] = wellDetails.Uicnumber;\r\n record[\"Lease Name\"] = wellDetails.LeaseName;\r\n record[\"Well Number\"] = wellDetails.WellNumber;\r\n record[\"BEGWellId\"] = wellDetails.Id;\r\n\r\n /*if (firstRecord) {\r\n record[\"UIC Number\"] = wellDetails.Uicnumber;\r\n record[\"Lease Name\"] = wellDetails.LeaseName;\r\n record[\"Well Number\"] = wellDetails.WellNumber;\r\n record[\"BEGWellId\"] = wellDetails.Id;\r\n firstRecord = false;\r\n }\r\n else {\r\n record[\"UIC Number\"] = null;\r\n record[\"Lease Name\"] = null;\r\n record[\"Well Number\"] = null;\r\n record[\"BEGWellId\"] = null;\r\n }*/\r\n\r\n \r\n\r\n var recordDateString = formatDate(curdate);\r\n var recordEndDateString = formatDate(curEndDate);\r\n\r\n record[\"Date\"] = recordDateString;\r\n record[\"EndDate\"] = recordEndDateString;\r\n dataColumnslist.forEach(columnProps => {\r\n //if many to many replace options\r\n if(columnProps.type == \"manytomany\") {\r\n let originalValue = combinedDataForms[index][columnProps.key];\r\n let options = columnProps.options;\r\n let switchedValues = this.switchManyToManyOptions(originalValue, options);\r\n record[columnProps.label] = switchedValues;\r\n }\r\n else {\r\n record[columnProps.label] = combinedDataForms[index][columnProps.key];\r\n }\r\n\r\n });\r\n\r\n data.push(record);\r\n\r\n if (dateMode == \"daily\") {\r\n curdate.setDate(curdate.getDate() + 1);\r\n }\r\n else if (dateMode == \"monthly\") {\r\n curdate.setMonth(curdate.getMonth() + 1);\r\n }\r\n index++;\r\n }\r\n\r\n let requiredList = dataColumnslist.filter(dataColumnItem => {\r\n return dataColumnItem.required;\r\n }).map(dataColumnItem => {\r\n return dataColumnItem.label\r\n });\r\n\r\n var ws = XLSX.utils.json_to_sheet(data);\r\n for (var i in ws) {\r\n if (typeof ws[i] == 'object') {\r\n\r\n // styling for all cells\r\n ws[i].s = {\r\n font: {\r\n bold: false\r\n },\r\n fill: {\r\n patternType: 'solid',\r\n fgColor: { rgb: 'ffffff' },\r\n bgColor: { rgb: 'ffffff' },\r\n },\r\n border: {\r\n top: {\r\n style: 'thin',\r\n color: { rgb: 'd4d4d4' }\r\n },\r\n bottom: {\r\n style: 'thin',\r\n color: { rgb: 'd4d4d4' }\r\n },\r\n right: {\r\n style: 'thin',\r\n color: { rgb: 'd4d4d4' }\r\n },\r\n left: {\r\n style: 'thin',\r\n color: { rgb: 'd4d4d4' }\r\n }\r\n },\r\n };\r\n\r\n let cell = XLSX.utils.decode_cell(i);\r\n if (cell.r == 0 && requiredList.includes(ws[i].v)) {\r\n // first row\r\n ws[i].s.font.bold = true;\r\n ws[i].s.fill.bgColor = { rgb: 'cccccc' };\r\n ws[i].s.fill.fgColor = { rgb: 'cccccc' };\r\n }\r\n }\r\n }\r\n\r\n const wb: XLSX.WorkBook = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');\r\n XLSX.writeFile(wb, finalFilename);\r\n }\r\n\r\n daysBetweenDates(date1, date2) {\r\n // Convert both dates to milliseconds\r\n var date1_ms = date1.getTime();\r\n var date2_ms = date2.getTime();\r\n\r\n // Calculate the difference in milliseconds\r\n var difference_ms = Math.abs(date2_ms - date1_ms);\r\n\r\n // Convert the difference to days\r\n var difference_days = Math.ceil(difference_ms / (1000 * 3600 * 24));\r\n\r\n return difference_days;\r\n }\r\n\r\n //Generates mutli well template\r\n public generateTemplateMultiWell(wellDetailsList: WellDetailsModel[], beginDate: Date, endDate: Date, dateMode: string, tableName: string, dataColumnslist: any[], combinedDataForms: any[]) {\r\n\r\n function formatDate(date) {\r\n let d = new Date(date);\r\n let month = '' + (d.getMonth() + 1);\r\n let day = '' + d.getDate();\r\n let year = '' + d.getFullYear();\r\n\r\n if (month.length < 2)\r\n month = '0' + month;\r\n if (day.length < 2)\r\n day = '0' + day;\r\n\r\n return [month, day, year].join('/');\r\n }\r\n\r\n var beginDateString = formatDate(beginDate);\r\n var endDateString = formatDate(endDate);\r\n var finalFilename = tableName + \"_multiwell_\" + beginDateString + \"_\" + endDateString + \"_\" + dateMode + \".xlsx\";\r\n var workbook = XLSX.utils.book_new();\r\n var data = [];\r\n\r\n\r\n\r\n for (let wellIndex = 0; wellIndex < wellDetailsList.length; wellIndex++) {\r\n\r\n let wellDetails = wellDetailsList[wellIndex];\r\n\r\n var curdate = new Date(beginDate);\r\n var firstRecord = true;\r\n while (curdate <= endDate) {\r\n\r\n var curEndDate = null;\r\n\r\n if (dateMode == \"monthly\") {\r\n curEndDate = new Date(curdate);\r\n curEndDate.setMonth(curEndDate.getMonth() + 1);\r\n curEndDate.setDate(0);\r\n }\r\n else if (dateMode == \"daily\") {\r\n curEndDate = new Date(curdate);\r\n }\r\n\r\n var record = {};\r\n\r\n //Fill in the well header rows for all rows, not just the first one for each well.\r\n record[\"UIC Number\"] = wellDetails.Uicnumber;\r\n record[\"Lease Name\"] = wellDetails.LeaseName;\r\n record[\"Well Number\"] = wellDetails.WellNumber;\r\n record[\"BEGWellId\"] = wellDetails.Id;\r\n\r\n /*if (firstRecord) {\r\n record[\"UIC Number\"] = wellDetails.Uicnumber;\r\n record[\"Lease Name\"] = wellDetails.LeaseName;\r\n record[\"Well Number\"] = wellDetails.WellNumber;\r\n record[\"BEGWellId\"] = wellDetails.Id;\r\n firstRecord = false;\r\n }\r\n else {\r\n record[\"UIC Number\"] = null;\r\n record[\"Lease Name\"] = null;\r\n record[\"Well Number\"] = null;\r\n record[\"BEGWellId\"] = null;\r\n }*/\r\n\r\n\r\n\r\n var recordDateString = formatDate(curdate);\r\n var recordEndDateString = formatDate(curEndDate);\r\n\r\n record[\"Date\"] = recordDateString;\r\n record[\"EndDate\"] = recordEndDateString;\r\n\r\n //validate that the combinedDataForms has content\r\n let dataFormHasContent = combinedDataForms !== null && combinedDataForms.length !== 0 && combinedDataForms[wellIndex].length !== 0;\r\n dataColumnslist.forEach(columnProps => {\r\n //only record value if data column should persist in template\r\n if (dataFormHasContent) {\r\n record[columnProps.label] = columnProps.persist ? combinedDataForms[wellIndex][columnProps.key] : '';\r\n } else {\r\n //when data form has no content see record to empty string so column will appear in excel template\r\n record[columnProps.label] = '';\r\n }\r\n });\r\n\r\n data.push(record);\r\n\r\n if (dateMode == \"daily\") {\r\n curdate.setDate(curdate.getDate() + 1);\r\n }\r\n else if (dateMode == \"monthly\") {\r\n curdate.setMonth(curdate.getMonth() + 1);\r\n }\r\n }\r\n\r\n //add empty space between wells *disabled for now*\r\n //data.push({});\r\n\r\n }\r\n\r\n\r\n let requiredList = dataColumnslist.filter(dataColumnItem => {\r\n return dataColumnItem.required;\r\n }).map(dataColumnItem => {\r\n return dataColumnItem.label\r\n });\r\n\r\n let numberOfRecordsPerWell = this.daysBetweenDates(beginDate, endDate);\r\n\r\n var ws = XLSX.utils.json_to_sheet(data);\r\n for (var i in ws) {\r\n if (typeof ws[i] == 'object') {\r\n\r\n // styling for all cells\r\n ws[i].s = {\r\n font: {\r\n bold: false\r\n },\r\n fill: {\r\n patternType: 'solid',\r\n fgColor: { rgb: 'ffffff' },\r\n bgColor: { rgb: 'ffffff' },\r\n },\r\n border: {\r\n top: {\r\n style: 'thin',\r\n color: { rgb: 'd4d4d4' }\r\n },\r\n bottom: {\r\n style: 'thin',\r\n color: { rgb: 'd4d4d4' }\r\n },\r\n right: {\r\n style: 'thin',\r\n color: { rgb: 'd4d4d4' }\r\n },\r\n left: {\r\n style: 'thin',\r\n color: { rgb: 'd4d4d4' }\r\n }\r\n },\r\n };\r\n\r\n let cell = XLSX.utils.decode_cell(i);\r\n if (cell.r == 0 && requiredList.includes(ws[i].v)) {\r\n // first row\r\n ws[i].s.font.bold = true;\r\n ws[i].s.fill.bgColor = { rgb: 'cccccc' };\r\n ws[i].s.fill.fgColor = { rgb: 'cccccc' };\r\n }\r\n if (Math.floor((cell.r - 1) / numberOfRecordsPerWell) % 2 == 1 && cell.r !== 0) {\r\n ws[i].s.fill.bgColor = { rgb: 'f2f2f2' };\r\n ws[i].s.fill.fgColor = { rgb: 'f2f2f2' };\r\n }\r\n }\r\n }\r\n\r\n const wb: XLSX.WorkBook = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');\r\n XLSX.writeFile(wb, finalFilename);\r\n }\r\n\r\n protected switchManyToManyOptions(originalValues: any, options: Array) {\r\n\r\n // If originalValues are empty return an empty string.\r\n if (originalValues == null) {\r\n return '';\r\n }\r\n\r\n let originalParts = [];\r\n\r\n if(originalValues.split != null) {\r\n originalParts = originalValues.split(',');\r\n }\r\n else if(originalValues instanceof Array) {\r\n originalParts = originalValues;\r\n }\r\n \r\n let finalParts = [];\r\n\r\n\r\n originalParts.forEach((origPart) => {\r\n\r\n for(let i=0; i < options.length; i++) {\r\n\r\n if(options[i].value == origPart) {\r\n finalParts.push(options[i].label);\r\n break;\r\n }\r\n }\r\n });\r\n\r\n let final = finalParts.join(\",\");\r\n\r\n return final;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { MatDialog } from '@angular/material/dialog';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { saveAs } from 'file-saver';\nimport { ExportOption } from '../_models/export-option';\nimport { ExportRequest } from '../_models/export-request';\n\nimport { ExportInProgressDialogComponent } from '../export-in-progress-dialog/export-in-progress-dialog.component';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExportInjectionPressureManagerService {\n \n public exportManagerWorking: BehaviorSubject = new BehaviorSubject(false);\n\n public exportOptions: BehaviorSubject> = new BehaviorSubject>(null);\n\n constructor(\n private httpClient: HttpClient,\n private dialog: MatDialog\n ) {\n }\n\n public exportCount(exportRequest: ExportRequest) {\n var promise = new Promise((resolve, reject) => {\n\n var url = \"api/ExportBHP/count\";\n\n this.httpClient.post(url, exportRequest).subscribe((result: any) => {\n resolve(result);\n });\n });\n\n return promise;\n }\n\n public export(exportRequest: ExportRequest, presentDialog: boolean): Promise {\n var promise = new Promise((resolve, reject) => {\n\n var url = \"api/ExportBHP\";\n this.exportManagerWorking.next(true);\n\n if (presentDialog) {\n this.dialog.open(ExportInProgressDialogComponent, {\n disableClose: true\n });\n }\n \n\n this.httpClient.post(url, exportRequest, {\n responseType: \"arraybuffer\",\n observe: \"response\"\n }).subscribe((result: any) => {\n var headers = result.headers;\n\n var contentDisposition = headers.get('content-disposition');\n const r = /(?:filename=)(.+)(?:;)/;\n var regexResults = r.exec(contentDisposition);\n\n var filename = regexResults[1];\n\n var type = \"text/plain\";\n\n var blobdata = [new Uint8Array(result.body, 0, result.length)];\n\n var blob = new Blob(blobdata, { type: type });\n\n saveAs(blob, filename);\n\n //Close the dialog\n if (presentDialog) {\n this.dialog.closeAll();\n }\n\n resolve(null);\n },\n (error) => {\n this.exportManagerWorking.next(false);\n\n //Close the dialog\n if (presentDialog) {\n this.dialog.closeAll();\n }\n });\n });\n\n return promise;\n }\n}\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ExportOption } from '../_models/export-option';\r\nimport { ExportRequest } from '../_models/export-request';\r\nimport { saveAs } from 'file-saver';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ExportInProgressDialogComponent } from '../export-in-progress-dialog/export-in-progress-dialog.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExportManagerService {\r\n\r\n public exportManagerWorking: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n public exportOptions: BehaviorSubject> = new BehaviorSubject>(null);\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n private dialog: MatDialog\r\n ) {\r\n //Go ahead and load the options.\r\n this.getExportOptions();\r\n }\r\n\r\n protected getExportOptions() {\r\n\r\n var promise = new Promise((resolve, reject) => {\r\n this.exportManagerWorking.next(true);\r\n\r\n var url = \"api/Export/exportOptions\";\r\n\r\n this.httpClient.get(url).subscribe((result: Array) => {\r\n this.exportManagerWorking.next(false);\r\n this.exportOptions.next(result);\r\n },\r\n (err) => {\r\n this.exportManagerWorking.next(false);\r\n });\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public exportCount(exportRequest: ExportRequest) {\r\n var promise = new Promise((resolve, reject) => {\r\n\r\n var url = \"api/Export/count\";\r\n\r\n this.httpClient.post(url, exportRequest).subscribe((result: any) => {\r\n resolve(result);\r\n });\r\n });\r\n\r\n return promise;\r\n }\r\n\r\n public export(exportRequest: ExportRequest, presentDialog: boolean): Promise {\r\n var promise = new Promise((resolve, reject) => {\r\n\r\n var url = \"api/Export\";\r\n this.exportManagerWorking.next(true);\r\n\r\n if (presentDialog) {\r\n this.dialog.open(ExportInProgressDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n \r\n\r\n this.httpClient.post(url, exportRequest, {\r\n responseType: \"arraybuffer\",\r\n observe: \"response\"\r\n }).subscribe((result: any) => {\r\n var headers = result.headers;\r\n\r\n var contentDisposition = headers.get('content-disposition');\r\n const r = /(?:filename=)(.+)(?:;)/;\r\n var regexResults = r.exec(contentDisposition);\r\n\r\n var filename = regexResults[1];\r\n\r\n var type = \"text/plain\";\r\n\r\n var blobdata = [new Uint8Array(result.body, 0, result.length)];\r\n\r\n var blob = new Blob(blobdata, { type: type });\r\n\r\n saveAs(blob, filename);\r\n\r\n //Close the dialog\r\n if (presentDialog) {\r\n this.dialog.closeAll();\r\n }\r\n\r\n resolve(null);\r\n },\r\n (error) => {\r\n this.exportManagerWorking.next(false);\r\n\r\n //Close the dialog\r\n if (presentDialog) {\r\n this.dialog.closeAll();\r\n }\r\n });\r\n });\r\n\r\n return promise;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Formation } from '../_models/formation';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormationService {\r\n\r\n public searchByNameWorking: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n constructor(protected http: HttpClient) { }\r\n\r\n public searchByName(name: string) {\r\n this.searchByNameWorking.next(true);\r\n\r\n var url = \"api/formation/search/\" + encodeURIComponent(name);\r\n\r\n var prom = new Promise>((resolve, reject) => {\r\n this.searchByNameWorking.next(true);\r\n\r\n this.http.get(url).toPromise().then((result: Array) => {\r\n this.searchByNameWorking.next(false);\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.searchByNameWorking.next(false);\r\n reject(err);\r\n })\r\n });\r\n\r\n return prom;\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, EventEmitter } from '@angular/core';\r\nimport { Subject, BehaviorSubject, throwError } from 'rxjs';\r\nimport { InjectionDataModel } from '../_models/injection-data-model';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { InjectionDataBatch } from '../_models/injection-data-batch';\r\nimport { APIOperationResult } from '../_models/apioperation-result';\r\nimport { DeleteDateRangeModel } from '../_models/delete-date-range-model';\r\nimport { UserSubmittableDataBatch } from '../_models/user-submittable-data-batch';\r\n\r\nimport { UserSubmittableService } from './user-submittable-service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class InjectionService extends UserSubmittableService {\r\n\r\n public currentInjectionBatch: BehaviorSubject = new BehaviorSubject(null);\r\n public currentRecords: EventEmitter> = new EventEmitter>(null);\r\n public getInjectionDataWorking: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n public getInjectionDetailsWorking: BehaviorSubject = new BehaviorSubject(false);\r\n public getInjectionDetailsForIdComplete: EventEmitter = new EventEmitter();\r\n\r\n //Column sets for each page's data grid.\r\n\r\n //This one is the first page - injection volumes\r\n public injectionVolumeDataColumns;\r\n\r\n //This one is the second page, injection interval, formations, etc.\r\n public injectionIntervalDataColumns;\r\n\r\n //This one is the third page - composition of the injected material.\r\n public compositionDataColumns;\r\n\r\n constructor(httpClient: HttpClient)\r\n {\r\n super(httpClient);\r\n\r\n this._controllerName = \"injection\";\r\n }\r\n\r\n public getDataColumnsListPromise() {\r\n\r\n //If data columns dont exist make call to backend service\r\n if (!this.injectionVolumeDataColumns || !this.injectionIntervalDataColumns || !this.compositionDataColumns) {\r\n return this.httpClient.get(\"api/injection/Columns\").toPromise().then((result: any) => {\r\n this.injectionVolumeDataColumns = result.injectionVolumeDataColumns;\r\n this.injectionIntervalDataColumns = result.injectionIntervalDataColumns;\r\n this.compositionDataColumns = result.compositionDataColumns;\r\n return [this.injectionVolumeDataColumns, this.injectionIntervalDataColumns, this.compositionDataColumns];\r\n });\r\n } else {\r\n return Promise.resolve([this.injectionVolumeDataColumns, this.injectionIntervalDataColumns, this.compositionDataColumns]);\r\n }\r\n\r\n }\r\n\r\n public async getCombinedDataColumnsList() {\r\n let labelList = [];\r\n let dataColumnObjs = await this.getDataColumnsListPromise();\r\n\r\n //interate over all dataColumns add all labels to an array\r\n dataColumnObjs.forEach(dataColumnObj => {\r\n Object.keys(dataColumnObj).forEach(key => {\r\n\r\n var labelProps = {\r\n key,\r\n label: dataColumnObj[key].label,\r\n required: dataColumnObj[key].required,\r\n persist: dataColumnObj[key].persist,\r\n type: \"number\",\r\n options: null\r\n };\r\n\r\n //Don't assign undefined to this\r\n if (dataColumnObj[key].type != null) {\r\n labelProps.type = dataColumnObj[key].type;\r\n\r\n //Also check if the type happens to be of the many to many type, and if so, set the options property.\r\n labelProps.options = dataColumnObj[key].options;\r\n }\r\n\r\n labelList.push(labelProps);\r\n });\r\n });\r\n\r\n return labelList;\r\n }\r\n\r\n public async GetPersistList() {\r\n let combinedDataColumnsList = await this.getCombinedDataColumnsList();\r\n return combinedDataColumnsList.filter(dataColumnObj => {\r\n return dataColumnObj.persist;\r\n }).map(dataColumnObj => {\r\n return dataColumnObj.key\r\n });\r\n }\r\n\r\n public GetInjectionData(wellId: number) {\r\n\r\n if (!this.getInjectionDataWorking.value) {\r\n\r\n var tempInjRecs = new Array();\r\n\r\n this.currentRecords.next(tempInjRecs);\r\n\r\n this.getInjectionDataWorking.next(true);\r\n\r\n this.httpClient.get(\"api/injection/well/\" + wellId).subscribe((result: Array) => {\r\n\r\n this.getInjectionDataWorking.next(false);\r\n this.currentRecords.emit(result);\r\n });\r\n }\r\n }\r\n\r\n public ClearCurrentRecords() {\r\n var tempInjRecs = new Array();\r\n this.currentRecords.emit(tempInjRecs);\r\n }\r\n\r\n public GetInjectionDetailsForId(id: number) {\r\n\r\n if (!this.getInjectionDataWorking.value) {\r\n\r\n this.getInjectionDetailsWorking.next(true);\r\n\r\n this.httpClient.get(\"api/injection/\" + id).subscribe((result: InjectionDataRecord) => {\r\n this.getInjectionDetailsWorking.next(false);\r\n\r\n this.getInjectionDetailsForIdComplete.emit(result);\r\n });\r\n }\r\n }\r\n\r\n public GetLastInjectionRecordWithWellId(wellId: number): Promise {\r\n\r\n var ret;\r\n\r\n if (wellId == null) {\r\n ret = new Promise((resolve, reject) => {\r\n resolve(null);\r\n });\r\n }\r\n else {\r\n ret = >this.httpClient.get(\"api/injection/LastInjectionWithWellId/\" + wellId).toPromise();\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n public GetEmptyDailySubmittableBatch(wellId: number, beginDate: Date, endDate: Date, useLastSubmission: boolean) {\r\n\r\n let lBeginDate = beginDate.getTime() / 1000;\r\n let lEndDate = endDate.getTime() / 1000;\r\n\r\n let tzo = beginDate.getTimezoneOffset();\r\n\r\n let tzoms = tzo * 60.0;\r\n\r\n let lBeginDateActuallyUtc = this.convertToActuallyUTC(beginDate, 12, 0, 0).getTime() / 1000;\r\n let lEndDateActuallyUtc = this.convertToActuallyUTC(endDate, 12, 0, 0).getTime() / 1000;\r\n\r\n let suls = \"false\";\r\n\r\n if (useLastSubmission == true) {\r\n suls = \"true\";\r\n }\r\n\r\n let url = \"api/\" + this._controllerName + \"/Empty?wellId=\" + wellId + \"&begin=\" + lBeginDateActuallyUtc + \"&end=\" + lEndDateActuallyUtc + \"&useLastSubmission=\" + suls;\r\n\r\n this.httpClient.get(url).pipe(catchError(this.handleSubmitBatchError)).subscribe( async (result: UserSubmittableDataBatch) => {\r\n\r\n let injBatch = result;\r\n let persistList = await this.GetPersistList();\r\n //add metadata values to persistList\r\n persistList = persistList.concat(['InjectionDate', 'InjectionEndDate', 'Id', 'WellId']);\r\n result.Injections = result.Injections.map(inj => {\r\n for (let key in inj) {\r\n //clear values that are not on the persist list.\r\n if (!persistList.includes(key)) {\r\n inj[key] = '';\r\n }\r\n }\r\n return inj;\r\n });\r\n\r\n this.currentBatch.next(injBatch);\r\n },\r\n (result) => {\r\n\r\n });\r\n }\r\n\r\n public GetEmptyMonthlySubmittableBatch(wellId: number, beginDate: Date, endDate: Date, useLastSubmission: boolean) {\r\n\r\n let lBeginDate = beginDate.getTime() / 1000;\r\n let lEndDate = endDate.getTime() / 1000;\r\n\r\n let tzo = beginDate.getTimezoneOffset();\r\n\r\n let tzoms = tzo * 60.0;\r\n\r\n let lBeginDateActuallyUtc = this.convertToActuallyUTC(beginDate, 12, 0, 0).getTime() / 1000;\r\n let lEndDateActuallyUtc = this.convertToActuallyUTC(endDate, 12, 0, 0).getTime() / 1000;\r\n\r\n let suls = \"false\";\r\n\r\n if (useLastSubmission == true) {\r\n suls = \"true\";\r\n }\r\n\r\n let url = \"api/\" + this._controllerName + \"/EmptyMonthly?wellId=\" + wellId + \"&begin=\" + lBeginDateActuallyUtc + \"&end=\" + lEndDateActuallyUtc + \"&useLastSubmission=\" + suls;\r\n\r\n this.httpClient.get(url).pipe(catchError(this.handleSubmitBatchError)).subscribe(async (result: UserSubmittableDataBatch) => {\r\n\r\n let injBatch = result;\r\n let persistList = await this.GetPersistList();\r\n //add metadata values to persistList\r\n persistList = persistList.concat(['InjectionDate', 'InjectionEndDate', 'Id', 'WellId']);\r\n result.Injections = result.Injections.map(inj => {\r\n for (let key in inj) {\r\n //clear values that are not on the persist list.\r\n if (!persistList.includes(key)) {\r\n inj[key] = '';\r\n }\r\n }\r\n return inj;\r\n });\r\n\r\n this.currentBatch.next(injBatch);\r\n },\r\n (result) => {\r\n\r\n });\r\n }\r\n\r\n public getDateStringFormat(record) {\r\n\r\n function areTimestampsOnSameDay(timestamp1, timestamp2) {\r\n // Convert timestamps to Date objects\r\n const date1 = new Date(timestamp1);\r\n const date2 = new Date(timestamp2);\r\n\r\n // Extract year, month, and date\r\n const year1 = date1.getFullYear();\r\n const month1 = date1.getMonth();\r\n const day1 = date1.getDate();\r\n\r\n const year2 = date2.getFullYear();\r\n const month2 = date2.getMonth();\r\n const day2 = date2.getDate();\r\n\r\n // Compare year, month, and date\r\n return year1 === year2 && month1 === month2 && day1 === day2;\r\n }\r\n\r\n let InjectionDate = record.InjectionDate;\r\n let InjectionEndDate = record.InjectionEndDate;\r\n\r\n if (areTimestampsOnSameDay(InjectionDate, InjectionEndDate)) {\r\n return 'yyyy/MM/dd';\r\n } else {\r\n return 'MMM yyyy';\r\n }\r\n\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\n\nimport { MassEmailArgs } from '../_models/mass-email-args';\nimport { APIOperationResult } from '../_models/apioperation-result';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MassEmailService {\n\n constructor(public httpClient: HttpClient) { }\n\n public sendEmail(args: MassEmailArgs) : Promise {\r\n var prom = new Promise((resolve, reject) => {\r\n var url = \"api/MassEmail/Send\";\r\n\r\n this.httpClient.post(url, args).subscribe((result: any) => {\r\n resolve(result);\r\n },\r\n (err) => {\r\n reject();\r\n });\r\n\r\n });\r\n\r\n return prom;\r\n }\n}\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { OperatorModel } from '../_models/operator-model';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OperatorService {\r\n\r\n public searchP5NumberWorking: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n constructor(\r\n protected http: HttpClient\r\n ) { }\r\n\r\n searchByP5Number(p5Number: number):Promise> {\r\n\r\n var url = \"api/welloperator/searchp5/\" + p5Number;\r\n\r\n var prom = new Promise>((resolve, reject) => {\r\n this.searchP5NumberWorking.next(true);\r\n\r\n this.http.get(url).toPromise().then((result: Array) => {\r\n this.searchP5NumberWorking.next(false);\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.searchP5NumberWorking.next(false);\r\n reject(err);\r\n })\r\n });\r\n\r\n\r\n return prom;\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { APIOperationResult } from '../_models/apioperation-result';\r\nimport { NewUserRequestModel } from '../_models/new-user-request-model';\r\nimport { ResetPasswordArgs } from '../_models/reset-password-args';\r\nimport { User } from '../_models/user';\r\nimport { OperatorModel } from '../_models/operator-model';\r\nimport { ValidateEmailRequestArgs } from '../_models/validate-email-request-args';\r\nimport { ValidateEmailResponse } from '../_models/validate-email-response';\r\nimport { UserOperatorModel } from '../_models/user-operator-model';\r\nimport { OperatorApprovedUsersModel } from '../_models/operator-approved-users-model';\r\nimport { SafeUser } from '../_models/safe-user';\r\n\r\nimport { UserPrefsModel } from '../_models/user-prefs-model';\r\nimport { UserPrefsExchangeModel } from '../_models/user-prefs-exchange-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserAccountService {\r\n\r\n isSubmitNewUserWorking: BehaviorSubject = new BehaviorSubject(false);\r\n isConfirmUserWorking: BehaviorSubject = new BehaviorSubject(false);\r\n isApproveUserWorking: BehaviorSubject = new BehaviorSubject(false);\r\n isChangePasswordWorking: BehaviorSubject = new BehaviorSubject(false);\r\n isResetPasswordWorking: BehaviorSubject = new BehaviorSubject(false);\r\n isGetMyUserPrefsWorking: BehaviorSubject = new BehaviorSubject(false);\r\n public isFetchOperatorsForUserWorking: BehaviorSubject = new BehaviorSubject(false);\r\n public isFetchMyApprovedUsersWorking: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n constructor(protected httpClient: HttpClient) {\r\n\r\n }\r\n\r\n public validateEmail(email: string): Promise {\r\n\r\n var validateEmailApiUrl = \"api/Users/ValidateEmail\";\r\n\r\n var args: ValidateEmailRequestArgs = new ValidateEmailRequestArgs();\r\n args.email = email;\r\n\r\n return > this.httpClient.post(validateEmailApiUrl, args).toPromise();\r\n }\r\n\r\n public submitNewUser(newUserModel: NewUserRequestModel): Promise {\r\n\r\n var prom = new Promise((resolve, reject) => {\r\n this.isSubmitNewUserWorking.next(true);\r\n\r\n var url = \"api/Users/Register\";\r\n\r\n this.httpClient.post(url, newUserModel).toPromise().then((result: APIOperationResult) => {\r\n this.isSubmitNewUserWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.isSubmitNewUserWorking.next(false);\r\n reject(err);\r\n });\r\n\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n public adminSubmitNewUser(newUserModel: NewUserRequestModel): Promise {\r\n var prom = new Promise((resolve, reject) => {\r\n this.isSubmitNewUserWorking.next(true);\r\n\r\n var url = \"api/Users/admin/new\";\r\n\r\n this.httpClient.post(url, newUserModel).toPromise().then((result: APIOperationResult) => {\r\n this.isSubmitNewUserWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.isSubmitNewUserWorking.next(false);\r\n reject(err);\r\n });\r\n\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n public confirmUser(userId: number, confirmationCode: string) {\r\n var prom = new Promise((resolve, reject) => {\r\n\r\n this.isConfirmUserWorking.next(true);\r\n\r\n var url = \"api/Users/userconfirm/\" + userId.toString() + \"/\" + confirmationCode;\r\n\r\n this.httpClient.get(url).toPromise().then((result: APIOperationResult) => {\r\n this.isConfirmUserWorking.next(false);\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.isConfirmUserWorking.next(false);\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n public approverConfirmUser(userId: number, operatorId: number, confirmationCode: string, approve: string) {\r\n var prom = new Promise((resolve, reject) => {\r\n\r\n this.isApproveUserWorking.next(true);\r\n\r\n var url = \"api/Users/approverconfirm/\" + userId.toString() + \"/\" + operatorId.toString() + \"/\" + confirmationCode + \"/\" + approve;\r\n\r\n this.httpClient.get(url).toPromise().then((result: APIOperationResult) => {\r\n this.isApproveUserWorking.next(false);\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.isApproveUserWorking.next(false);\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n public getFullAccountDetails(userId: number): Promise {\r\n var prom = new Promise((resolve, reject) => {\r\n\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n public changePassword(userId: number, oldPassword: string, newPassword: string): Promise {\r\n var prom = new Promise((resolve, reject) => {\r\n this.isChangePasswordWorking.next(true);\r\n var url = \"api/Users/\" + userId.toString() + \"/changepassword\";\r\n\r\n var args = {\r\n oldPassword: oldPassword,\r\n newPassword: newPassword\r\n };\r\n\r\n this.httpClient.post(url, args).subscribe((result: APIOperationResult) => {\r\n this.isChangePasswordWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.isChangePasswordWorking.next(false);\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n public resetPasssword(resetArgs: ResetPasswordArgs): Promise {\r\n var prom = new Promise((resolve, reject) => {\r\n this.isResetPasswordWorking.next(true);\r\n var url = \"api/Users/resetpassword\";\r\n\r\n this.httpClient.post(url, resetArgs).subscribe((result: APIOperationResult) => {\r\n this.isResetPasswordWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.isResetPasswordWorking.next(false);\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n\r\n requestNewOperatorsForUser(userId: number, operatorIds: Array) {\r\n\r\n var reqBody = {\r\n userId: userId,\r\n operatorIds: operatorIds\r\n };\r\n\r\n var url = \"api/Users/requestnewoperators\";\r\n\r\n var prom = new Promise((resolve, reject) => {\r\n this.httpClient.post(url, reqBody).toPromise().then(() => {\r\n resolve(null);\r\n },\r\n (err) => {\r\n reject();\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n\r\n fetchOperatorsForUser(userId: number): Promise> {\r\n var url = \"api/Users/\" + userId + \"/operators\";\r\n\r\n var prom = new Promise>((resolve, reject) => {\r\n\r\n this.isFetchOperatorsForUserWorking.next(true);\r\n\r\n this.httpClient.get(url).toPromise().then((result: Array) => {\r\n this.isFetchOperatorsForUserWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.isFetchOperatorsForUserWorking.next(false);\r\n reject();\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n fetchMyApprovedUsers(): Promise> {\r\n var url = \"api/Users/myapproved\";\r\n\r\n var prom = new Promise>((resolve, reject) => {\r\n this.isFetchMyApprovedUsersWorking.next(true);\r\n\r\n this.httpClient.get(url).toPromise().then((result: Array) => {\r\n this.isFetchMyApprovedUsersWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n this.isFetchMyApprovedUsersWorking.next(false);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n fetchSafeUser(userId: number, operatorId: number) {\r\n var url = \"api/Users/\" + userId + \"/\" + operatorId + \"/safe\";\r\n\r\n var prom = new Promise>((resolve, reject) => {\r\n //this.isFetchMyApprovedUsersWorking.next(true);\r\n\r\n this.httpClient.get(url).toPromise().then((result: Array) => {\r\n //this.isFetchMyApprovedUsersWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n //this.isFetchMyApprovedUsersWorking.next(false);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n fetchAllUsers(): Promise> {\r\n var url = \"api/Users/allusers\";\r\n\r\n var prom = new Promise>((resolve, reject) => {\r\n //this.isFetchMyApprovedUsersWorking.next(true);\r\n\r\n this.httpClient.get(url).toPromise().then((result: Array) => {\r\n //this.isFetchMyApprovedUsersWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n //this.isFetchMyApprovedUsersWorking.next(false);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n adminFetchUser(userId: number) {\r\n var url = \"api/Users/admin/\" + userId;\r\n\r\n var prom = new Promise((resolve, reject) => {\r\n //this.isFetchMyApprovedUsersWorking.next(true);\r\n\r\n this.httpClient.get(url).toPromise().then((result: SafeUser) => {\r\n //this.isFetchMyApprovedUsersWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n reject(err);\r\n //this.isFetchMyApprovedUsersWorking.next(false);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n adminUpdateUser(userAttrs: any) {\r\n var url = \"api/Users/admin/\" + userAttrs.Id;\r\n\r\n var prom = new Promise((resolve, reject) => {\r\n //this.isFetchMyApprovedUsersWorking.next(true);\r\n\r\n this.httpClient.post(url, userAttrs).toPromise().then((result: SafeUser) => {\r\n //this.isFetchMyApprovedUsersWorking.next(false);\r\n\r\n resolve(result);\r\n },\r\n (err) => {\r\n reject(err);\r\n //this.isFetchMyApprovedUsersWorking.next(false);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n resendConfirmationEmail(userId: number) {\r\n var url = \"api/Users/ResendConfirmation/\" + userId;\r\n\r\n var prom = new Promise((resolve, reject) => {\r\n this.httpClient.get(url).toPromise().then((result: any) => {\r\n resolve(result);\r\n },\r\n (err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n getMyUserPrefs() {\r\n var url = \"api/Users/myprefs\";\r\n\r\n var prom = new Promise((resolve, reject) => {\r\n this.isGetMyUserPrefsWorking.next(true);\r\n\r\n this.httpClient.get(url).toPromise().then((result:UserPrefsExchangeModel) => {\r\n this.isGetMyUserPrefsWorking.next(false);\r\n\r\n let userPrefs = null;\r\n\r\n if(result.SerializedUserPrefs != null)\r\n {\r\n userPrefs = JSON.parse(result.SerializedUserPrefs);\r\n }\r\n\r\n if(userPrefs == null || userPrefs == undefined) {\r\n userPrefs = new UserPrefsModel();\r\n }\r\n\r\n resolve(userPrefs);\r\n },\r\n (err) => {\r\n reject();\r\n this.isGetMyUserPrefsWorking.next(false);\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n saveMyUserPrefs(userPrefs: UserPrefsModel) {\r\n var url = \"api/Users/myprefs\";\r\n\r\n let requestModel = new UserPrefsExchangeModel();\r\n\r\n requestModel.SerializedUserPrefs = JSON.stringify(userPrefs);\r\n\r\n var prom = new Promise((resolve, reject) => {\r\n let p = this.httpClient.post(url, requestModel).toPromise();\r\n\r\n p.then(() => {\r\n resolve();\r\n },\r\n (err) => {\r\n reject();\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\r\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserOperatorsEditService {\n\n constructor(private http: HttpClient) { }\n\n public isFetchingUserOperators: BehaviorSubject = new BehaviorSubject(false);\n\n public fetchUserOperators(userId: number) {\n\r\n var prom = new Promise((resolve, reject) => {\r\n\r\n var url = \"api/Users/admin/\" + userId.toString() + \"/operators\";\r\n\r\n this.http.get(url).toPromise().then((result) => {\r\n resolve(result);\r\n },\r\n (err) => {\r\n reject(err);\r\n }\r\n );\r\n });\r\n\r\n return prom;\r\n }\n\n public removeOperatorJunction(userId: number, operatorId: number) {\n var prom = new Promise((resolve, reject) => {\r\n var url = \"api/Users/admin/\" + userId.toString() + \"/operators/\" + operatorId;\r\n\r\n this.http.delete(url).toPromise().then((result) => {\r\n resolve();\r\n },\r\n (err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\n\n public approveUserForOperator(junction: any) {\n var prom = new Promise((resolve, reject) => {\r\n var url = \"api/Users/admin/\" + junction.UserId + \"/operators/\" + junction.OperatorId + \"/approve\";\r\n this.http.get(url).toPromise().then(() => {\r\n resolve();\r\n },\r\n (err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\n\n public unapproveUserForOperator(junction: any) {\n var prom = new Promise((resolve, reject) => {\r\n var url = \"api/Users/admin/\" + junction.UserId + \"/operators/\" + junction.OperatorId + \"/unapprove\";\r\n this.http.get(url).toPromise().then(() => {\r\n resolve();\r\n },\r\n (err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\n\n public grantApproverForUser(junction: any) {\n var prom = new Promise((resolve, reject) => {\r\n var url = \"api/Users/admin/\" + junction.UserId + \"/operators/\" + junction.OperatorId + \"/grantapprover\";\r\n this.http.get(url).toPromise().then(() => {\r\n resolve();\r\n },\r\n (err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\n\n public revokeApproverForUser(junction: any) {\n var prom = new Promise((resolve, reject) => {\r\n var url = \"api/Users/admin/\" + junction.UserId + \"/operators/\" + junction.OperatorId + \"/revokeapprover\";\r\n this.http.get(url).toPromise().then(() => {\r\n resolve();\r\n },\r\n (err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n return prom;\r\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, EventEmitter } from '@angular/core';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { Subject, BehaviorSubject, throwError } from 'rxjs';\r\n\r\nimport { APIOperationResult } from '../_models/apioperation-result';\r\nimport { DeleteDateRangeModel } from '../_models/delete-date-range-model';\r\nimport { UserSubmittableDataBatch } from '../_models/user-submittable-data-batch';\r\nimport { UserSubmittableDataRecord } from '../_models/user-submittable-data-record';\r\n\r\nexport class UserSubmittableService {\r\n\r\n public submitBatchWorking: BehaviorSubject = new BehaviorSubject(null);\r\n public submitBatchResult: EventEmitter = new EventEmitter();\r\n\r\n public presubmitValidationWorking: BehaviorSubject = new BehaviorSubject(false);\r\n public presubmitValidationResult: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n public currentBatch: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n public currentDetailsRecord: BehaviorSubject = new BehaviorSubject(null);\r\n public currentDetailsRecordWorking: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n protected _controllerName = \"submittable\";\r\n\r\n constructor(\r\n public httpClient: HttpClient\r\n ) {\r\n \r\n }\r\n\r\n error(error: HttpErrorResponse) {\r\n\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n errorMessage = error.error.message;\r\n } else {\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n\r\n console.log(error.message);\r\n\r\n return throwError(errorMessage);\r\n }\r\n\r\n public handleSubmitBatchError(errorResponse: HttpErrorResponse) {\r\n var ret: string = \"horse\";\r\n \r\n return throwError(ret);\r\n }\r\n\r\n public handleDeleteError(errorResponse: HttpErrorResponse) {\r\n var ret: string = \"Error while deleting.\";\r\n\r\n return throwError(ret);\r\n }\r\n\r\n protected convertToActuallyUTC(date: Date, h: number, mm: number, s: number) {\r\n let y = date.getFullYear();\r\n let m = date.getMonth();\r\n let d = date.getDate();\r\n\r\n let utcDate = new Date(y,m,d, h, mm, s);\r\n\r\n return utcDate;\r\n }\r\n\r\n public GetEmptyDailySubmittableBatch(wellId: number, beginDate: Date, endDate: Date, useLastSubmission: boolean) {\r\n\r\n let lBeginDate = beginDate.getTime() / 1000;\r\n let lEndDate = endDate.getTime() / 1000;\r\n\r\n let tzo = beginDate.getTimezoneOffset();\r\n\r\n let tzoms = tzo * 60.0;\r\n\r\n let lBeginDateActuallyUtc = this.convertToActuallyUTC(beginDate, 12, 0, 0).getTime() / 1000;\r\n let lEndDateActuallyUtc = this.convertToActuallyUTC(endDate, 12,0,0).getTime() / 1000;\r\n\r\n let suls = \"false\";\r\n\r\n if(useLastSubmission == true) {\r\n suls = \"true\";\r\n }\r\n\r\n let url = \"api/\" + this._controllerName + \"/Empty?wellId=\" + wellId + \"&begin=\" + lBeginDateActuallyUtc + \"&end=\" + lEndDateActuallyUtc + \"&useLastSubmission=\" + suls ;\r\n\r\n this.httpClient.get(url).pipe(catchError(this.handleSubmitBatchError)).subscribe((result: UserSubmittableDataBatch) => {\r\n\r\n let injBatch = result;\r\n\r\n this.currentBatch.next(injBatch);\r\n },\r\n (result) => {\r\n\r\n });\r\n }\r\n\r\n public SubmitBatch(dataBatch: UserSubmittableDataBatch): void {\r\n\r\n dataBatch.submitMode = \"u\";\r\n\r\n if (!this.submitBatchWorking.value) {\r\n this.submitBatchWorking.next(true);\r\n\r\n this.httpClient.post(\"api/\" + this._controllerName + \"/Submit\", dataBatch).pipe(catchError(this.handleSubmitBatchError)).subscribe((result: any) => {\r\n\r\n var opResult = result;\r\n\r\n this.submitBatchWorking.next(false);\r\n this.submitBatchResult.emit(opResult);\r\n }, (result) => {\r\n var opResult = result;\r\n\r\n this.submitBatchWorking.next(false);\r\n this.submitBatchResult.emit(opResult);\r\n });\r\n }\r\n }\r\n\r\n public SubmitMultiWellBatch(dataBatch: UserSubmittableDataBatch, injectionType: string): void {\r\n\r\n dataBatch.submitMode = \"u\";\r\n\r\n if (!this.submitBatchWorking.value) {\r\n this.submitBatchWorking.next(true);\r\n\r\n this.httpClient.post(\"api/\" + injectionType + \"/SubmitMulti\", dataBatch).pipe(catchError(this.handleSubmitBatchError)).subscribe((result: any) => {\r\n\r\n var opResult = result;\r\n\r\n this.submitBatchWorking.next(false);\r\n this.submitBatchResult.emit(opResult);\r\n }, (result) => {\r\n var opResult = result;\r\n\r\n this.submitBatchWorking.next(false);\r\n this.submitBatchResult.emit(opResult);\r\n });\r\n }\r\n }\r\n\r\n public doPresubmitValidation(dataBatch: UserSubmittableDataBatch) : void {\r\n\r\n dataBatch.submitMode = \"u\";\r\n\r\n if(!this.presubmitValidationWorking.value) {\r\n this.presubmitValidationWorking.next(true);\r\n\r\n this.httpClient.post(\"api/\" + this._controllerName + \"/PresubmitValidation\", dataBatch).pipe(catchError(this.handleSubmitBatchError)).subscribe((result: any) => {\r\n var opResult = result;\r\n\r\n this.presubmitValidationWorking.next(false);\r\n this.presubmitValidationResult.next(opResult);\r\n }, (result) => {\r\n var opResult = result;\r\n\r\n this.presubmitValidationWorking.next(false);\r\n this.presubmitValidationResult.next(opResult);\r\n });\r\n }\r\n }\r\n\r\n public clearPresubmitValidation() {\r\n this.presubmitValidationWorking.next(true);\r\n this.presubmitValidationResult.next(null);\r\n }\r\n\r\n public deleteRecord(record: UserSubmittableDataRecord) {\r\n var ret;\r\n\r\n ret = >this.httpClient.delete(\"api/\" + this._controllerName + \"/\" + record.Id).pipe(catchError(this.handleDeleteError)).toPromise();\r\n\r\n return ret;\r\n }\r\n public DeleteInjectionDateRange(dateRangeArgs: DeleteDateRangeModel): Promise {\r\n var ret;\r\n\r\n ret = >this.httpClient.post(\"api/injection/deleterange\", dateRangeArgs).pipe(catchError(this.handleDeleteError)).toPromise();\r\n\r\n return ret;\r\n }\r\n\r\n \r\n public GetRecord(id: number): Promise {\r\n var ret;\r\n\r\n if (id == null) {\r\n ret = new Promise((resolve, reject) => {\r\n resolve(null);\r\n });\r\n }\r\n else {\r\n ret = >this.httpClient.get(\"api/\" + this._controllerName + \"/\" + id).toPromise();\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n public UpdateRecord(inj: UserSubmittableDataRecord): Promise {\r\n var ret;\r\n\r\n ret = > this.httpClient.post(\"api/\" + this._controllerName + \"/update\", inj).pipe(catchError(this.handleSubmitBatchError)).toPromise();\r\n\r\n return ret;\r\n }\r\n\r\n public DeleteRecord(inj: UserSubmittableDataRecord): Promise {\r\n var ret;\r\n\r\n ret = >this.httpClient.delete(\"api/\" + this._controllerName + \"/\" + inj.Id).pipe(catchError(this.handleDeleteError)).toPromise();\r\n\r\n return ret;\r\n }\r\n\r\n public DeleteDateRange(dateRangeArgs: DeleteDateRangeModel): Promise {\r\n var ret;\r\n\r\n ret = >this.httpClient.post(\"api/\" + this._controllerName + \"/deleterange\", dateRangeArgs).pipe(catchError(this.handleDeleteError)).toPromise();\r\n\r\n return ret;\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, OnDestroy, ChangeDetectorRef } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgDynamicBreadcrumbService } from 'ng-dynamic-breadcrumb';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { BHPService } from '../_services/bhp.service';\r\nimport { UserWellsService } from '../user-wells.service';\r\nimport { ExcelImportService } from '../_services/excel-import.service';\r\n\r\nimport { DailyDateRangeSelectorComponent } from '../daily-date-range-selector/daily-date-range-selector.component';\r\nimport { InjectionDataGrid2Component } from '../injection-data-grid2/injection-data-grid2.component';\r\nimport { ApiResultErrorDialogComponent } from '../api-result-error-dialog/api-result-error-dialog.component';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { ImportExcelDataComponent } from '../import-excel-data/import-excel-data.component';\r\n\r\nimport { InjectionPressureDataBatch } from '../_models/injection-pressure-data-batch';\r\nimport { InjectionPressureDataRecord } from '../_models/injection-pressure-data-record';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { UserSubmittableDataBatch } from '../_models/user-submittable-data-batch';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatStepper } from '@angular/material/stepper';\r\n\r\n@Component({\r\n selector: 'app-add-bhp',\r\n templateUrl: './add-bhp.component.html',\r\n styleUrls: ['./add-bhp.component.css']\r\n})\r\nexport class AddBHPComponent implements OnInit, OnDestroy {\r\n\r\n currentForm: FormGroup;\r\n page1Form: FormGroup;\r\n page2Form: FormGroup;\r\n\r\n dateBoundsSelectionForm: FormGroup;\r\n useOldDataForm: FormGroup;\r\n methodForm: FormGroup;\r\n bhpDataForm: FormGroup;\r\n\r\n excelSubmitted: boolean = false;\r\n\r\n wellId: BehaviorSubject = new BehaviorSubject(null);\r\n beginDate: BehaviorSubject = new BehaviorSubject(null);\r\n endDate: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n @ViewChild(\"dateRangeSelector\") dateRangeSelector: DailyDateRangeSelectorComponent;\r\n @ViewChild(\"bhpDataGrid\") bhpDataGrid: InjectionDataGrid2Component;\r\n\r\n beginDateSubscription: Subscription;\r\n endDateSubscription: Subscription;\r\n detailsWellSubscription: Subscription;\r\n submitBatchSubscription: Subscription;\r\n excelTemplateDataSubscription: Subscription;\r\n measurementMethodSubscription: Subscription;\r\n\r\n wellRecord: WellDetailsModel;\r\n bhpBatch: InjectionPressureDataBatch;\r\n\r\n dateRangeMode: string = \"multi\";\r\n\r\n //This one is the first page - injection volumes\r\n public bhpDataColumns: any = {};\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private cdr: ChangeDetectorRef,\r\n protected router: Router,\r\n protected actRoute: ActivatedRoute,\r\n protected breadcrumbService: NgDynamicBreadcrumbService,\r\n public bhpService: BHPService,\r\n public userWellService: UserWellsService,\r\n protected excelImportService: ExcelImportService,\r\n protected dialog: MatDialog\r\n ) {\r\n\r\n //Subscribe to the details well on the user service.\r\n this.detailsWellSubscription = this.userWellService.detailsWell.subscribe((x) => {\r\n\r\n this.wellRecord = x;\r\n\r\n if (this.dateBoundsSelectionForm != null) {\r\n var dbsForm = this.dateBoundsSelectionForm.get(\"dateBoundsSelectionForm\");\r\n\r\n if (dbsForm != null) {\r\n dbsForm.get(\"WellRecord\").setValue(x);\r\n }\r\n }\r\n\r\n if (x != null) {\r\n //Update the breadcrumbs to show the well UIC number.\r\n\r\n var breadcrumbdata = {\r\n Uicnumber: x.Uicnumber.toString()\r\n };\r\n\r\n this.breadcrumbService.updateBreadcrumbLabels(breadcrumbdata);\r\n }\r\n });\r\n \r\n //Subscribe to the wellId change event...\r\n this.wellId.subscribe((newWellId) => {\r\n this.userWellService.LoadDetailsWell(newWellId);\r\n });\r\n\r\n //Subscribe to the result parameter on the bhp service.\r\n this.submitBatchSubscription = this.bhpService.submitBatchResult.subscribe((x) => {\r\n\r\n if (x != null) {\r\n //If we successfully uploaded our injection data, navigate back to the well details page\r\n if (x.Success == true) {\r\n\r\n var successRoute = 'well/' + this.wellId.value;\r\n\r\n router.navigate([successRoute]);\r\n }\r\n else {\r\n var dialogRef = this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: x\r\n });\r\n }\r\n }\r\n });\r\n\r\n this.excelTemplateDataSubscription = this.excelImportService.currentExcelTemplateData.subscribe((x: any) => {\r\n\r\n if (x != null && this.excelSubmitted) {\r\n\r\n let excelInputErrorList = [];\r\n\r\n x.Injections.forEach((injection: any, index) => {\r\n Object.keys(this.bhpDataColumns).forEach(key => {\r\n if (this.bhpDataColumns[key].disabled) {\r\n injection[key] = null;\r\n }\r\n })\r\n if (!this.checkDatesMatch(injection.MeasurementDate, this.bhpDataForm.value.InjectionRows[index].MeasurementDate)) {\r\n excelInputErrorList.push(`Invalid date provided: ${injection.MeasurementDate}. Please do not modify the date columns.`);\r\n }\r\n });\r\n\r\n if (excelInputErrorList.length == 0) {\r\n x.Injections.forEach((injection: any, index) => {\r\n this.bhpDataGrid.patchValues(injection, index);\r\n });\r\n } else {\r\n let excelErrorObj = {\r\n Reasons: excelInputErrorList\r\n }\r\n this.dialog.open(ApiResultErrorDialogComponent, { data: excelErrorObj });\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.bhpService.getDataColumnsListPromise().then((result: any) => {\r\n [this.bhpDataColumns] = result;\r\n }).catch((error) => {\r\n //display error dialog and return user to mywells when call fails\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Service Unavailable\",\r\n message: \"Something went wrong, please try again.\"\r\n }\r\n }).afterClosed().subscribe(() => {\r\n this.router.navigate(['/mywells']);\r\n });\r\n });\r\n\r\n //Create the date bounds form - this is the formgroup for the first page\r\n this.dateBoundsSelectionForm = this.formBuilder.group({\r\n });\r\n\r\n //\r\n this.useOldDataForm = this.formBuilder.group({\r\n 'useOldInjectionValues': [true, []]\r\n });\r\n\r\n this.methodForm = this.formBuilder.group({\r\n 'bhpMeasurementMethod': [null, Validators.required]\r\n });\r\n\r\n //\r\n this.measurementMethodSubscription = this.methodForm.controls['bhpMeasurementMethod'].valueChanges.subscribe((newValue) => {\r\n\r\n if(newValue == 1 || newValue == 2) {\r\n this.dateRangeMode = \"single\";\r\n }\r\n else if(newValue == 3) {\r\n this.dateRangeMode = \"multi\";\r\n }\r\n });\r\n\r\n\r\n //Compose the page 1 form. We use this to tie all these forms together, so that their validation state can be used to lock the stepper from stepping until a valid state is reached.\r\n this.page1Form = this.formBuilder.group({});\r\n\r\n this.page1Form.addControl(\"dateBounds\", this.dateBoundsSelectionForm);\r\n this.page1Form.addControl(\"useOldData\", this.useOldDataForm);\r\n this.page1Form.addControl(\"methodForm\", this.methodForm);\r\n\r\n this.page2Form = this.formBuilder.group({});\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n //We need our whole form to be initialized before we do this, because all of it relies on this.\r\n this.wellId.next(this.actRoute.snapshot.params.wellId);\r\n\r\n this.initDateBoundsSelectionForm();\r\n\r\n this.initBhpDataForm();\r\n\r\n this.currentForm = this.page1Form;\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if(this.beginDateSubscription != null) {\r\n this.beginDateSubscription.unsubscribe();\r\n\r\n this.beginDateSubscription = null;\r\n }\r\n\r\n if(this.endDateSubscription != null) {\r\n this.endDateSubscription.unsubscribe();\r\n\r\n this.endDateSubscription = null;\r\n }\r\n if (this.excelTemplateDataSubscription != null) {\r\n this.excelTemplateDataSubscription.unsubscribe();\r\n }\r\n this.excelTemplateDataSubscription = null;\r\n\r\n if(this.measurementMethodSubscription != null) {\r\n this.measurementMethodSubscription.unsubscribe();\r\n }\r\n this.measurementMethodSubscription = null;\r\n this.bhpService.currentBatch = new BehaviorSubject(null);\r\n }\r\n\r\n //Handle the stepper changing from one step to another.\r\n onStepChange(event: any) {\r\n\r\n if (event.selectedIndex == 0) {\r\n this.currentForm = this.page1Form;\r\n }\r\n if (event.selectedIndex == 1) {\r\n this.currentForm = this.page2Form;\r\n }\r\n\r\n //Are we switching away from the date selection page (index 0)?\r\n if(event.previouslySelectedIndex == 0)\r\n {\r\n this.initColumnDataWithMeasurementMethod();\r\n this.initDailyInjectionPressureBatch();\r\n }\r\n\r\n //Are we switching to the submit page?\r\n if(event.selectedIndex == 2)\r\n {\r\n this.doPresubmit();\r\n }\r\n }\r\n\r\n initBhpDataForm() {\r\n this.bhpDataForm = this.bhpDataGrid.injectionForm;\r\n\r\n this.page2Form.addControl(\"bhpDataForm\", this.bhpDataForm);\r\n }\r\n\r\n //The set of columns\r\n initColumnDataWithMeasurementMethod() {\r\n let measurementMethodFormValue = this.methodForm.value;\r\n\r\n let method = measurementMethodFormValue.bhpMeasurementMethod;\r\n this.bhpDataColumns = this.bhpService.updateDataColumnsByMeasurementMethod(this.bhpDataColumns, method);\r\n }\r\n\r\n initDailyInjectionPressureBatch() {\r\n if(this.bhpService.currentInjectionPressureBatch.value == null || this.dateBoundsSelectionForm.dirty || this.useOldDataForm.dirty)\r\n {\r\n let dateBoundsFormResult = this.dateBoundsSelectionForm.value.dateBoundsSelectionForm;\r\n\r\n let bd = dateBoundsFormResult.BeginDate;\r\n let ed = dateBoundsFormResult.EndDate;\r\n\r\n let bUseOldInjectionValues = this.useOldDataForm.value.useOldInjectionValues;\r\n\r\n this.bhpService.GetEmptyDailySubmittableBatch(this.wellId.value, bd, ed, bUseOldInjectionValues);\r\n\r\n this.dateBoundsSelectionForm.markAsPristine();\r\n this.useOldDataForm.markAsPristine();\r\n }\r\n }\r\n\r\n initDateBoundsSelectionForm() {\r\n this.dateBoundsSelectionForm.addControl('dateBoundsSelectionForm', this.dateRangeSelector.dateBoundsSelectionForm);\r\n \r\n this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").valueChanges.subscribe((newvalue) => {\r\n this.beginDate.next(newvalue);\r\n });\r\n\r\n this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").valueChanges.subscribe((newvalue) => {\r\n this.endDate.next(newvalue);\r\n });\r\n\r\n //We have to manually grab these values initially.\r\n this.beginDate.next(this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").value);\r\n this.endDate.next(this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").value);\r\n \r\n }\r\n\r\n fillInjectionPressureWithFormContents(inj: InjectionPressureDataRecord, i: number) {\r\n\r\n //Capture the injection data values from the form\r\n let injectionPressureDataFormValues = this.bhpDataGrid.getValues();\r\n\r\n if(injectionPressureDataFormValues.InjectionRows[i] != null) {\r\n let rowData = injectionPressureDataFormValues.InjectionRows[i];\r\n\r\n let keys = Object.keys(rowData);\r\n\r\n keys.forEach((key) => {\r\n\r\n if(key != \"MeasurementDate\") {\r\n inj[key] = rowData[key];\r\n }\r\n });\r\n }\r\n }\r\n\r\n checkDatesMatch(date1, date2) {\r\n return new Date(date1).getTime() == new Date(date2).getTime();\r\n }\r\n\r\n getDataColumnslist() {\r\n let labelList = [];\r\n\r\n let dataColumnObjs = [this.bhpDataColumns];\r\n\r\n //interate over all dataColumns add all labels to an array\r\n dataColumnObjs.forEach(dataColumnObj => {\r\n Object.keys(dataColumnObj).forEach(key => {\r\n labelList.push({\r\n key,\r\n label: dataColumnObj[key].label,\r\n required: dataColumnObj[key].required\r\n });\r\n });\r\n });\r\n\r\n return labelList;\r\n }\r\n\r\n getExcelTemplate() {\r\n let dateBoundsFormResult = this.dateBoundsSelectionForm.value.dateBoundsSelectionForm;\r\n\r\n let dataColumnslist = this.getDataColumnslist();\r\n\r\n this.excelImportService.generateTemplate(this.wellRecord, dateBoundsFormResult.BeginDate, dateBoundsFormResult.EndDate, 'daily', 'BottomHolePressure', dataColumnslist, this.bhpDataForm.value.InjectionRows);\r\n }\r\n\r\n uploadExcelTemplate() {\r\n\r\n let dataColumnslist = this.getDataColumnslist();\r\n let config: any = {};\r\n config.data = {\r\n dataColumnsList: dataColumnslist,\r\n controllerName: 'injectionPressure'\r\n };\r\n this.dialog.open(ImportExcelDataComponent, config);\r\n this.excelSubmitted = true;\r\n }\r\n\r\n doPresubmit() {\r\n //Avoid a dumb crash, in case the injection batch is null for some reason.\r\n if(this.bhpService.currentBatch.value != null) {\r\n let curBatch: InjectionPressureDataBatch = this.bhpService.currentBatch.value;\r\n\r\n //We're not going to use forEach here, because we need the index as a variable anyway.\r\n for (let i=0; i < curBatch.Injections.length; i++) {\r\n let inj = curBatch.Injections[i];\r\n\r\n //Fill the injection record with data from the forms.\r\n this.fillInjectionPressureWithFormContents(inj, i);\r\n }\r\n\r\n //Do the presubmit validation\r\n this.bhpService.doPresubmitValidation(this.bhpService.currentBatch.value);\r\n }\r\n }\r\n\r\n doSubmit() {\r\n let batch = this.bhpService.currentBatch.value;\r\n\r\n if(batch != null) {\r\n\r\n this.bhpService.SubmitBatch(batch);\r\n }\r\n }\r\n\r\n goNext(stepper: MatStepper) {\r\n stepper.next();\r\n }\r\n\r\n goBack(stepper: MatStepper) {\r\n stepper.previous();\r\n }\r\n\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, OnDestroy, ChangeDetectorRef } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { ExcelImportService } from '../_services/excel-import.service';\r\nimport { InjectionService } from '../_services/injection.service';\r\nimport { UserWellsService } from '../user-wells.service';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { InjectionDataBatch } from '../_models/injection-data-batch';\r\nimport { UserSubmittableDataBatch } from '../_models/user-submittable-data-batch';\r\n\r\nimport { InjectionDataGrid2Component } from '../injection-data-grid2/injection-data-grid2.component';\r\nimport { ApiResultErrorDialogComponent } from '../api-result-error-dialog/api-result-error-dialog.component';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { ImportExcelDataComponent } from '../import-excel-data/import-excel-data.component';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { NgDynamicBreadcrumbService } from 'ng-dynamic-breadcrumb';\r\nimport { MonthlyDateRangeSelectorComponent } from '../monthly-date-range-selector/monthly-date-range-selector.component';\r\n\r\n@Component({\r\n selector: 'app-add-injection2-monthly',\r\n templateUrl: './add-injection2-monthly.component.html',\r\n styleUrls: ['./add-injection2-monthly.component.css']\r\n})\r\nexport class AddInjection2MonthlyComponent implements OnInit {\r\n\r\n wellRecord: WellDetailsModel;\r\n\r\n excelSubmitted: boolean = false;\r\n\r\n wellId: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n beginDate: BehaviorSubject = new BehaviorSubject(null);\r\n endDate: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n submitBatchSubscription: Subscription;\r\n currentRecordsSubscription: Subscription;\r\n detailsWellSubscription: Subscription;\r\n wellIdSubscription: Subscription;\r\n beginDateSubscription: Subscription;\r\n endDateSubscription: Subscription;\r\n excelTemplateDataSubscription: Subscription;\r\n\r\n @ViewChild(\"dateRangeSelector\") dateRangeSelector: MonthlyDateRangeSelectorComponent;\r\n @ViewChild(\"injectionDataGrid\") injectionDataGrid: InjectionDataGrid2Component;\r\n @ViewChild(\"injectionIntervalDataGrid\") injectionIntervalDataGrid: InjectionDataGrid2Component;\r\n @ViewChild(\"compositionDataGrid\") compositionDataGrid: InjectionDataGrid2Component;\r\n\r\n //Forms - nominally, one for each page.\r\n currentForm: FormGroup;\r\n dateBoundsSelectionForm: FormGroup;\r\n useOldDataForm: FormGroup;\r\n injectionDataForm: FormGroup;\r\n injectionIntervalDataForm: FormGroup;\r\n compositionDataForm: FormGroup;\r\n\r\n //Column sets for each page's data grid, pulled from injectionService\r\n\r\n //This one is the first page - injection volumes\r\n public injectionVolumeDataColumns: any = {};\r\n\r\n //This one is the second page, injection interval, formations, etc.\r\n public injectionIntervalDataColumns: any = {};\r\n\r\n //This one is the third page - composition of the injected material.\r\n public compositionDataColumns: any = {};\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private cdr: ChangeDetectorRef,\r\n public userWellService: UserWellsService,\r\n public injectionService: InjectionService,\r\n protected router: Router,\r\n protected actRoute: ActivatedRoute,\r\n protected breadcrumbService: NgDynamicBreadcrumbService,\r\n protected dialog: MatDialog,\r\n protected excelImportService: ExcelImportService\r\n ) {\r\n\r\n //Subscribe to the details well on the user service.\r\n this.detailsWellSubscription = this.userWellService.detailsWell.subscribe((x) => {\r\n\r\n this.wellRecord = x;\r\n\r\n if (this.dateBoundsSelectionForm != null) {\r\n var dbsForm = this.dateBoundsSelectionForm.get(\"dateBoundsSelectionForm\");\r\n\r\n if (dbsForm != null) {\r\n dbsForm.get(\"WellRecord\").setValue(x);\r\n }\r\n }\r\n\r\n if (x != null) {\r\n //Update the breadcrumbs to show the well UIC number.\r\n\r\n var breadcrumbdata = {\r\n Uicnumber: x.Uicnumber.toString()\r\n };\r\n\r\n this.breadcrumbService.updateBreadcrumbLabels(breadcrumbdata);\r\n\r\n this.updateFormationIdColumnOptions();\r\n }\r\n });\r\n\r\n //Subscribe to the wellId change event...\r\n this.wellIdSubscription = this.wellId.subscribe((newWellId) => {\r\n this.userWellService.LoadDetailsWell(newWellId);\r\n });\r\n\r\n //Subscribe to the result parameter on the injection service.\r\n this.submitBatchSubscription = this.injectionService.submitBatchResult.subscribe((x) => {\r\n\r\n if (x != null) {\r\n //If we successfully uploaded our injection data, navigate back to the well details page\r\n if (x.Success == true) {\r\n\r\n var successRoute = 'well/' + this.wellId.value;\r\n\r\n router.navigate([successRoute]);\r\n }\r\n else {\r\n var dialogRef = this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: x\r\n });\r\n }\r\n }\r\n });\r\n\r\n this.excelTemplateDataSubscription = this.excelImportService.currentExcelTemplateData.subscribe((x: any) => {\r\n\r\n if (x != null && this.excelSubmitted) {\r\n\r\n let excelInputErrorList = [];\r\n\r\n x.Injections.forEach((injection: any, index) => {\r\n if (this.checkDatesMatch(injection.InjectionDate, this.injectionDataForm.value.InjectionRows[index].InjectionDate)) {\r\n injection = this.transformExcelInjectionForDataForm(injection);\r\n } else {\r\n excelInputErrorList.push(`Invalid date provided: ${injection.InjectionDate}. Please do not modify the date columns.`);\r\n }\r\n });\r\n\r\n if (excelInputErrorList.length == 0) {\r\n x.Injections.forEach((injection: any, index) => {\r\n this.injectionDataGrid.patchValues(injection, index);\r\n this.injectionIntervalDataGrid.patchValues(injection, index);\r\n this.compositionDataGrid.patchValues(injection, index);\r\n\r\n //additional sync is needed for manyToMany input\r\n this.injectionIntervalDataGrid.syncManyToManyOptions('FormationIds', index);\r\n });\r\n } else {\r\n let excelErrorObj = {\r\n Reasons: excelInputErrorList\r\n }\r\n this.dialog.open(ApiResultErrorDialogComponent, { data: excelErrorObj });\r\n }\r\n\r\n }\r\n\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.injectionService.getDataColumnsListPromise().then((result: any) => {\r\n //if any dataColumn has a monthlyScaleFactor key, scale the min and max with that value\r\n result = result.map(dataColumn => {\r\n Object.keys(dataColumn).forEach(key => {\r\n let col = dataColumn[key];\r\n Object.keys(col).forEach(col_key => {\r\n if (col_key == \"monthlyScaleFactor\") {\r\n col.min *= col.monthlyScaleFactor;\r\n col.max *= col.monthlyScaleFactor;\r\n }\r\n });\r\n });\r\n return dataColumn\r\n });\r\n [this.injectionVolumeDataColumns, this.injectionIntervalDataColumns, this.compositionDataColumns] = result;\r\n }).catch((error) => {\r\n //display error dialog and return user to mywells when call fails\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Service Unavailable\",\r\n message: \"Something went wrong, please try again.\"\r\n }\r\n }).afterClosed().subscribe(() => {\r\n this.router.navigate(['/mywells']);\r\n });\r\n });\r\n\r\n //Create the date bounds form - this is the formgroup for the first page\r\n this.dateBoundsSelectionForm = this.formBuilder.group({\r\n });\r\n\r\n this.useOldDataForm = this.formBuilder.group({\r\n 'useOldInjectionValues': [true, []]\r\n });\r\n\r\n //Subscribe to the current injection batch\r\n this.currentRecordsSubscription = this.injectionService.currentRecords.subscribe((newInjectionDataBatch: InjectionDataBatch) => {\r\n\r\n if (newInjectionDataBatch != null) {\r\n //When we have a \r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n //We need our whole form to be initialized before we do this, because all of it relies on this.\r\n this.wellId.next(this.actRoute.snapshot.params.wellId);\r\n\r\n this.initDateBoundsSelectionForm();\r\n this.currentForm = this.dateBoundsSelectionForm;\r\n\r\n this.initInjectionDataForm();\r\n this.initInjectionIntervalDataForm();\r\n this.initCompositionDataForm();\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.submitBatchSubscription != null) {\r\n this.submitBatchSubscription.unsubscribe();\r\n }\r\n\r\n if (this.currentRecordsSubscription != null) {\r\n this.currentRecordsSubscription.unsubscribe();\r\n }\r\n\r\n if (this.detailsWellSubscription != null) {\r\n this.detailsWellSubscription.unsubscribe();\r\n }\r\n\r\n if (this.wellIdSubscription != null) {\r\n this.wellIdSubscription.unsubscribe();\r\n }\r\n\r\n if (this.beginDateSubscription != null) {\r\n this.beginDateSubscription.unsubscribe();\r\n }\r\n\r\n if (this.endDateSubscription != null) {\r\n this.endDateSubscription.unsubscribe();\r\n }\r\n\r\n if (this.excelTemplateDataSubscription != null) {\r\n this.excelTemplateDataSubscription.unsubscribe();\r\n }\r\n this.injectionService.currentBatch = new BehaviorSubject(null);\r\n }\r\n\r\n initDateBoundsSelectionForm() {\r\n this.dateBoundsSelectionForm.addControl('dateBoundsSelectionForm', this.dateRangeSelector.dateBoundsSelectionForm);\r\n\r\n this.beginDateSubscription = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").valueChanges.subscribe((newvalue) => {\r\n this.beginDate.next(newvalue);\r\n });\r\n\r\n this.endDateSubscription = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").valueChanges.subscribe((newvalue) => {\r\n this.endDate.next(newvalue);\r\n });\r\n\r\n //We have to manually grab these values initially.\r\n this.beginDate.next(this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").value);\r\n this.endDate.next(this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").value);\r\n\r\n //Load the last injection record for this well, if one exists, \r\n this.injectionService.GetLastInjectionRecordWithWellId(this.wellId.value).then((injRec: InjectionDataRecord) => {\r\n this.importOtherDataFromInjectionRecord(injRec);\r\n },\r\n (err: any) => {\r\n });\r\n\r\n }\r\n\r\n initInjectionDataForm() {\r\n this.injectionDataForm = this.injectionDataGrid.injectionForm;\r\n }\r\n\r\n initInjectionIntervalDataForm() {\r\n this.injectionIntervalDataForm = this.injectionIntervalDataGrid.injectionForm;\r\n }\r\n\r\n initCompositionDataForm() {\r\n this.compositionDataForm = this.compositionDataGrid.injectionForm;\r\n }\r\n\r\n importOtherDataFromInjectionRecord(injRec: InjectionDataRecord) {\r\n }\r\n\r\n //Handle the stepper changing from one step to another.\r\n onStepChange(event: any) {\r\n\r\n let stepperFormGroups = [this.dateBoundsSelectionForm, this.injectionDataForm, this.injectionIntervalDataForm];\r\n this.currentForm = stepperFormGroups[event.selectedIndex];\r\n\r\n //Are we switching away from the date selection page (index 0)?\r\n if (event.previouslySelectedIndex == 0) {\r\n this.initMonthlyInjectionBatch();\r\n }\r\n\r\n //Are we switching to the submit page?\r\n if (event.selectedIndex == 4) {\r\n this.doPresubmit();\r\n }\r\n\r\n }\r\n\r\n initMonthlyInjectionBatch() {\r\n\r\n if (this.injectionService.currentInjectionBatch.value == null || this.dateBoundsSelectionForm.dirty || this.useOldDataForm.dirty) {\r\n let dateBoundsFormResult = this.dateBoundsSelectionForm.value.dateBoundsSelectionForm;\r\n\r\n let bd = dateBoundsFormResult.BeginDate;\r\n let ed = dateBoundsFormResult.EndDate;\r\n\r\n let bUseOldInjectionValues = this.useOldDataForm.value.useOldInjectionValues;\r\n\r\n this.injectionService.GetEmptyMonthlySubmittableBatch(this.wellId.value, bd, ed, bUseOldInjectionValues);\r\n\r\n this.dateBoundsSelectionForm.markAsPristine();\r\n this.useOldDataForm.markAsPristine();\r\n }\r\n }\r\n\r\n updateFormationIdColumnOptions() {\r\n //Update the formation options\r\n this.injectionIntervalDataColumns.FormationIds.options = new Array();\r\n\r\n if (this.wellRecord != null) {\r\n this.wellRecord.Formations.forEach((formation) => {\r\n let option = {\r\n value: formation.Id,\r\n label: formation.Name\r\n }\r\n\r\n this.injectionIntervalDataColumns.FormationIds.options.push(option);\r\n });\r\n }\r\n }\r\n\r\n fillInjectionWithFormContents(inj: InjectionDataRecord, i: number) {\r\n\r\n //Capture the injection data values from the form\r\n let injectionDataFormValues = this.injectionDataGrid.getValues();\r\n\r\n if (injectionDataFormValues.InjectionRows[i] != null) {\r\n let rowData = injectionDataFormValues.InjectionRows[i];\r\n\r\n let keys = Object.keys(rowData);\r\n\r\n keys.forEach((key) => {\r\n\r\n if (key != \"InjectionDate\") {\r\n inj[key] = rowData[key];\r\n }\r\n });\r\n }\r\n\r\n //Capture the injection interval form values\r\n let injectionIntervalDataFormValues = this.injectionIntervalDataGrid.getValues();\r\n\r\n if (injectionIntervalDataFormValues.InjectionRows[i] != null) {\r\n let rowData = injectionIntervalDataFormValues.InjectionRows[i];\r\n\r\n let keys = Object.keys(rowData);\r\n\r\n keys.forEach((key) => {\r\n\r\n if (key != \"InjectionDate\") {\r\n inj[key] = rowData[key];\r\n }\r\n });\r\n }\r\n\r\n //Capture the composition data form values\r\n let compositionDataFormValues = this.compositionDataGrid.getValues();\r\n\r\n if (compositionDataFormValues.InjectionRows[i] != null) {\r\n let rowData = compositionDataFormValues.InjectionRows[i];\r\n\r\n let keys = Object.keys(rowData);\r\n\r\n keys.forEach((key) => {\r\n\r\n if (key != \"InjectionDate\") {\r\n inj[key] = rowData[key];\r\n }\r\n });\r\n }\r\n }\r\n\r\n //Extra data transformation steps are needed for more complex user input\r\n transformExcelInjectionForDataForm(injection) {\r\n if (injection.InjectionThrough) {\r\n injection.InjectionThrough = injection.InjectionThrough.toLowerCase();\r\n }\r\n\r\n if (injection.InjectedFluidsOtherSources !== undefined) {\r\n if ((typeof injection.InjectedFluidsOtherSources == 'string' && injection.InjectedFluidsOtherSources.toLowerCase() == 'yes') || injection.InjectedFluidsOtherSources === true) {\r\n injection.InjectedFluidsOtherSources = true;\r\n } else {\r\n injection.InjectedFluidsOtherSources = null;\r\n }\r\n }\r\n\r\n if (injection.FormationIds) {\r\n let formationNameList = injection.FormationIds.toUpperCase().split(',');\r\n\r\n //Moving the removal of spaces to after the split operation so that they don't get removed from the middle of names.\r\n for (let i = 0; i < formationNameList.length; i++) {\r\n formationNameList[i] = formationNameList[i].trim();\r\n }\r\n\r\n let matchedFormationIdList = [];\r\n this.injectionIntervalDataColumns.FormationIds.options.forEach(option => {\r\n if (formationNameList.includes(option.label)) {\r\n let matchedIndex = formationNameList.indexOf(option.label);\r\n formationNameList.splice(matchedIndex, 1);\r\n matchedFormationIdList.push(option.value);\r\n }\r\n });\r\n injection.FormationIds = matchedFormationIdList.join(',');\r\n }\r\n\r\n return injection;\r\n }\r\n\r\n checkDatesMatch(date1, date2) {\r\n return new Date(date1).getTime() == new Date(date2).getTime();\r\n }\r\n\r\n async getExcelTemplate() {\r\n let dateBoundsFormResult = this.dateBoundsSelectionForm.value.dateBoundsSelectionForm;\r\n\r\n let combinedDataForms = []\r\n for (let i = 0; i < this.injectionDataForm.value.InjectionRows.length; i++) {\r\n combinedDataForms.push({ ...this.injectionDataForm.value.InjectionRows[i], ...this.injectionIntervalDataForm.value.InjectionRows[i], ...this.compositionDataForm.value.InjectionRows[i] })\r\n }\r\n\r\n let dataColumnsList = await this.injectionService.getCombinedDataColumnsList();\r\n\r\n this.excelImportService.generateTemplate(this.wellRecord, dateBoundsFormResult.BeginDate, dateBoundsFormResult.EndDate, 'monthly', 'InjectionVolume', dataColumnsList, combinedDataForms);\r\n }\r\n\r\n async uploadExcelTemplate() {\r\n\r\n let dataColumnslist = await this.injectionService.getCombinedDataColumnsList();\r\n let config: any = {};\r\n\r\n config.data = {\r\n dataColumnsList: dataColumnslist,\r\n controllerName: \"injection\"\r\n };\r\n\r\n this.dialog.open(ImportExcelDataComponent, config);\r\n this.excelSubmitted = true;\r\n }\r\n\r\n doPresubmit() {\r\n //Avoid a dumb crash, in case the injection batch is null for some reason.\r\n if (this.injectionService.currentBatch.value != null) {\r\n let curBatch: InjectionDataBatch = this.injectionService.currentBatch.value;\r\n\r\n //We're not going to use forEach here, because we need the index as a variable anyway.\r\n for (let i = 0; i < curBatch.Injections.length; i++) {\r\n let inj = curBatch.Injections[i];\r\n\r\n //Fill the injection record with data from the forms.\r\n this.fillInjectionWithFormContents(inj, i);\r\n }\r\n\r\n //Do the presubmit validation\r\n this.injectionService.doPresubmitValidation(this.injectionService.currentBatch.value);\r\n }\r\n }\r\n\r\n doSubmit() {\r\n\r\n let batch = this.injectionService.currentBatch.value;\r\n\r\n if (batch != null) {\r\n\r\n this.injectionService.SubmitBatch(batch);\r\n }\r\n }\r\n\r\n goNext(stepper: MatStepper) {\r\n stepper.next();\r\n }\r\n\r\n goBack(stepper: MatStepper) {\r\n stepper.previous();\r\n }\r\n\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, OnDestroy, ChangeDetectorRef } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { ExcelImportService } from '../_services/excel-import.service';\r\nimport { InjectionService } from '../_services/injection.service';\r\nimport { UserWellsService } from '../user-wells.service';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { InjectionDataBatch } from '../_models/injection-data-batch';\r\nimport { UserSubmittableDataBatch } from '../_models/user-submittable-data-batch';\r\n\r\nimport { DailyDateRangeSelectorComponent } from '../daily-date-range-selector/daily-date-range-selector.component';\r\nimport { InjectionDataGrid2Component } from '../injection-data-grid2/injection-data-grid2.component';\r\nimport { ApiResultErrorDialogComponent } from '../api-result-error-dialog/api-result-error-dialog.component';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { ImportExcelDataComponent } from '../import-excel-data/import-excel-data.component';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { NgDynamicBreadcrumbService } from 'ng-dynamic-breadcrumb';\r\n\r\n\r\n@Component({\r\n selector: 'app-add-injection2',\r\n templateUrl: './add-injection2.component.html',\r\n styleUrls: ['./add-injection2.component.css']\r\n})\r\nexport class AddInjection2Component implements OnInit, OnDestroy {\r\n\r\n wellRecord: WellDetailsModel;\r\n\r\n excelSubmitted: boolean = false;\r\n \r\n wellId: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n beginDate: BehaviorSubject = new BehaviorSubject(null);\r\n endDate: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n submitBatchSubscription: Subscription;\r\n currentRecordsSubscription: Subscription;\r\n detailsWellSubscription: Subscription;\r\n wellIdSubscription: Subscription;\r\n beginDateSubscription: Subscription;\r\n endDateSubscription: Subscription;\r\n excelTemplateDataSubscription: Subscription;\r\n\r\n @ViewChild(\"dateRangeSelector\") dateRangeSelector: DailyDateRangeSelectorComponent;\r\n @ViewChild(\"injectionDataGrid\") injectionDataGrid: InjectionDataGrid2Component;\r\n @ViewChild(\"injectionIntervalDataGrid\") injectionIntervalDataGrid: InjectionDataGrid2Component;\r\n @ViewChild(\"compositionDataGrid\") compositionDataGrid: InjectionDataGrid2Component;\r\n\r\n //Forms - nominally, one for each page.\r\n currentForm: FormGroup;\r\n dateBoundsSelectionForm: FormGroup;\r\n useOldDataForm: FormGroup;\r\n injectionDataForm: FormGroup;\r\n injectionIntervalDataForm: FormGroup;\r\n compositionDataForm: FormGroup;\r\n\r\n //Column sets for each page's data grid, pulled from injectionService\r\n\r\n //This one is the first page - injection volumes\r\n public injectionVolumeDataColumns: any = {};\r\n\r\n //This one is the second page, injection interval, formations, etc.\r\n public injectionIntervalDataColumns: any = {};\r\n\r\n //This one is the third page - composition of the injected material.\r\n public compositionDataColumns: any = {};\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private cdr: ChangeDetectorRef,\r\n public userWellService: UserWellsService,\r\n public injectionService: InjectionService,\r\n protected router: Router,\r\n protected actRoute: ActivatedRoute,\r\n protected breadcrumbService: NgDynamicBreadcrumbService,\r\n protected dialog: MatDialog,\r\n protected excelImportService: ExcelImportService\r\n ) {\r\n\r\n //Subscribe to the details well on the user service.\r\n this.detailsWellSubscription = this.userWellService.detailsWell.subscribe((x) => {\r\n\r\n this.wellRecord = x;\r\n\r\n if (this.dateBoundsSelectionForm != null) {\r\n var dbsForm = this.dateBoundsSelectionForm.get(\"dateBoundsSelectionForm\");\r\n\r\n if (dbsForm != null) {\r\n dbsForm.get(\"WellRecord\").setValue(x);\r\n }\r\n }\r\n\r\n if (x != null) {\r\n //Update the breadcrumbs to show the well UIC number.\r\n\r\n var breadcrumbdata = {\r\n Uicnumber: x.Uicnumber.toString()\r\n };\r\n\r\n this.breadcrumbService.updateBreadcrumbLabels(breadcrumbdata);\r\n\r\n this.updateFormationIdColumnOptions();\r\n }\r\n });\r\n\r\n //Subscribe to the wellId change event...\r\n this.wellIdSubscription = this.wellId.subscribe((newWellId) => {\r\n this.userWellService.LoadDetailsWell(newWellId);\r\n });\r\n\r\n //Subscribe to the result parameter on the injection service.\r\n this.submitBatchSubscription = this.injectionService.submitBatchResult.subscribe((x) => {\r\n\r\n if (x != null) {\r\n //If we successfully uploaded our injection data, navigate back to the well details page\r\n if (x.Success == true) {\r\n\r\n var successRoute = 'well/' + this.wellId.value;\r\n\r\n router.navigate([successRoute]);\r\n }\r\n else {\r\n var dialogRef = this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: x\r\n });\r\n }\r\n }\r\n });\r\n\r\n this.excelTemplateDataSubscription = this.excelImportService.currentExcelTemplateData.subscribe((x:any) => {\r\n\r\n if (x != null && this.excelSubmitted) {\r\n\r\n let excelInputErrorList = [];\r\n\r\n x.Injections.forEach((injection: any, index) => {\r\n if (this.checkDatesMatch(injection.InjectionDate, this.injectionDataForm.value.InjectionRows[index].InjectionDate)) {\r\n injection = this.transformExcelInjectionForDataForm(injection);\r\n } else {\r\n excelInputErrorList.push(`Invalid date provided: ${injection.InjectionDate}. Please do not modify the date columns.`);\r\n }\r\n });\r\n\r\n if (excelInputErrorList.length == 0) {\r\n x.Injections.forEach((injection: any, index) => {\r\n this.injectionDataGrid.patchValues(injection, index);\r\n this.injectionIntervalDataGrid.patchValues(injection, index);\r\n this.compositionDataGrid.patchValues(injection, index);\r\n\r\n //additional sync is needed for manyToMany input\r\n this.injectionIntervalDataGrid.syncManyToManyOptions('FormationIds', index);\r\n });\r\n } else {\r\n let excelErrorObj = {\r\n Reasons: excelInputErrorList\r\n }\r\n this.dialog.open(ApiResultErrorDialogComponent, { data: excelErrorObj });\r\n }\r\n\r\n }\r\n\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.injectionService.getDataColumnsListPromise().then((result: any) => {\r\n [this.injectionVolumeDataColumns, this.injectionIntervalDataColumns, this.compositionDataColumns] = result;\r\n }).catch((error) => {\r\n //display error dialog and return user to mywells when call fails\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Service Unavailable\",\r\n message: \"Something went wrong, please try again.\"\r\n }\r\n }).afterClosed().subscribe(() => {\r\n this.router.navigate(['/mywells']);\r\n });\r\n });\r\n\r\n //Create the date bounds form - this is the formgroup for the first page\r\n this.dateBoundsSelectionForm = this.formBuilder.group({\r\n });\r\n\r\n this.useOldDataForm = this.formBuilder.group({\r\n 'useOldInjectionValues': [true, []]\r\n });\r\n\r\n //Subscribe to the current injection batch\r\n this.currentRecordsSubscription = this.injectionService.currentRecords.subscribe((newInjectionDataBatch: InjectionDataBatch) => {\r\n\r\n if(newInjectionDataBatch != null) {\r\n //When we have a \r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n //We need our whole form to be initialized before we do this, because all of it relies on this.\r\n this.wellId.next(this.actRoute.snapshot.params.wellId);\r\n\r\n this.initDateBoundsSelectionForm();\r\n this.currentForm = this.dateBoundsSelectionForm;\r\n\r\n this.initInjectionDataForm();\r\n this.initInjectionIntervalDataForm();\r\n this.initCompositionDataForm();\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if(this.submitBatchSubscription != null) {\r\n this.submitBatchSubscription.unsubscribe();\r\n }\r\n\r\n if(this.currentRecordsSubscription != null) {\r\n this.currentRecordsSubscription.unsubscribe();\r\n }\r\n\r\n if(this.detailsWellSubscription != null) {\r\n this.detailsWellSubscription.unsubscribe();\r\n }\r\n\r\n if(this.wellIdSubscription != null) {\r\n this.wellIdSubscription.unsubscribe();\r\n }\r\n\r\n if(this.beginDateSubscription != null) {\r\n this.beginDateSubscription.unsubscribe();\r\n }\r\n\r\n if(this.endDateSubscription != null) {\r\n this.endDateSubscription.unsubscribe();\r\n }\r\n\r\n if (this.excelTemplateDataSubscription != null) {\r\n this.excelTemplateDataSubscription.unsubscribe();\r\n }\r\n this.injectionService.currentBatch = new BehaviorSubject(null);\r\n }\r\n\r\n initDateBoundsSelectionForm() {\r\n this.dateBoundsSelectionForm.addControl('dateBoundsSelectionForm', this.dateRangeSelector.dateBoundsSelectionForm);\r\n \r\n this.beginDateSubscription = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").valueChanges.subscribe((newvalue) => {\r\n this.beginDate.next(newvalue);\r\n });\r\n\r\n this.endDateSubscription = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").valueChanges.subscribe((newvalue) => {\r\n this.endDate.next(newvalue);\r\n });\r\n\r\n //We have to manually grab these values initially.\r\n this.beginDate.next(this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").value);\r\n this.endDate.next(this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").value);\r\n\r\n //Load the last injection record for this well, if one exists, \r\n this.injectionService.GetLastInjectionRecordWithWellId(this.wellId.value).then((injRec: InjectionDataRecord) => {\r\n this.importOtherDataFromInjectionRecord(injRec);\r\n },\r\n (err: any) => {\r\n });\r\n \r\n }\r\n\r\n initInjectionDataForm() {\r\n this.injectionDataForm = this.injectionDataGrid.injectionForm;\r\n }\r\n\r\n initInjectionIntervalDataForm() {\r\n this.injectionIntervalDataForm = this.injectionIntervalDataGrid.injectionForm;\r\n }\r\n\r\n initCompositionDataForm() {\r\n this.compositionDataForm = this.compositionDataGrid.injectionForm;\r\n }\r\n\r\n importOtherDataFromInjectionRecord(injRec: InjectionDataRecord) {\r\n }\r\n\r\n //Handle the stepper changing from one step to another.\r\n onStepChange(event: any) {\r\n\r\n let stepperFormGroups = [this.dateBoundsSelectionForm, this.injectionDataForm, this.injectionIntervalDataForm];\r\n this.currentForm = stepperFormGroups[event.selectedIndex];\r\n\r\n //Are we switching away from the date selection page (index 0)?\r\n if(event.previouslySelectedIndex == 0)\r\n {\r\n this.initDailyInjectionBatch();\r\n }\r\n\r\n //Are we switching to the submit page?\r\n if(event.selectedIndex == 4)\r\n {\r\n this.doPresubmit();\r\n }\r\n\r\n }\r\n\r\n initDailyInjectionBatch() {\r\n\r\n if(this.injectionService.currentInjectionBatch.value == null || this.dateBoundsSelectionForm.dirty || this.useOldDataForm.dirty)\r\n {\r\n let dateBoundsFormResult = this.dateBoundsSelectionForm.value.dateBoundsSelectionForm;\r\n\r\n let bd = dateBoundsFormResult.BeginDate;\r\n let ed = dateBoundsFormResult.EndDate;\r\n\r\n let bUseOldInjectionValues = this.useOldDataForm.value.useOldInjectionValues;\r\n\r\n this.injectionService.GetEmptyDailySubmittableBatch(this.wellId.value, bd, ed, bUseOldInjectionValues);\r\n\r\n this.dateBoundsSelectionForm.markAsPristine();\r\n this.useOldDataForm.markAsPristine();\r\n }\r\n }\r\n\r\n updateFormationIdColumnOptions() {\r\n //Update the formation options\r\n this.injectionIntervalDataColumns.FormationIds.options = new Array();\r\n\r\n if(this.wellRecord != null) {\r\n this.wellRecord.Formations.forEach((formation) => {\r\n let option = {\r\n value: formation.Id,\r\n label: formation.Name\r\n }\r\n\r\n this.injectionIntervalDataColumns.FormationIds.options.push(option);\r\n });\r\n }\r\n }\r\n\r\n fillInjectionWithFormContents(inj: InjectionDataRecord, i: number) {\r\n\r\n //Capture the injection data values from the form\r\n let injectionDataFormValues = this.injectionDataGrid.getValues();\r\n\r\n if(injectionDataFormValues.InjectionRows[i] != null) {\r\n let rowData = injectionDataFormValues.InjectionRows[i];\r\n\r\n let keys = Object.keys(rowData);\r\n\r\n keys.forEach((key) => {\r\n\r\n if(key != \"InjectionDate\") {\r\n inj[key] = rowData[key];\r\n }\r\n });\r\n }\r\n\r\n //Capture the injection interval form values\r\n let injectionIntervalDataFormValues = this.injectionIntervalDataGrid.getValues();\r\n\r\n if(injectionIntervalDataFormValues.InjectionRows[i] != null) {\r\n let rowData = injectionIntervalDataFormValues.InjectionRows[i];\r\n\r\n let keys = Object.keys(rowData);\r\n\r\n keys.forEach((key) => {\r\n\r\n if(key != \"InjectionDate\") {\r\n inj[key] = rowData[key];\r\n }\r\n });\r\n }\r\n\r\n //Capture the composition data form values\r\n let compositionDataFormValues = this.compositionDataGrid.getValues();\r\n\r\n if(compositionDataFormValues.InjectionRows[i] != null) {\r\n let rowData = compositionDataFormValues.InjectionRows[i];\r\n\r\n let keys = Object.keys(rowData);\r\n\r\n keys.forEach((key) => {\r\n\r\n if(key != \"InjectionDate\") {\r\n inj[key] = rowData[key];\r\n }\r\n });\r\n }\r\n }\r\n\r\n //Extra data transformation steps are needed for more complex user input\r\n transformExcelInjectionForDataForm(injection) {\r\n if (injection.InjectionThrough) {\r\n injection.InjectionThrough = injection.InjectionThrough.toLowerCase();\r\n }\r\n\r\n if (injection.InjectedFluidsOtherSources !== undefined) {\r\n if ((typeof injection.InjectedFluidsOtherSources == 'string' && injection.InjectedFluidsOtherSources.toLowerCase() == 'yes') || injection.InjectedFluidsOtherSources === true) {\r\n injection.InjectedFluidsOtherSources = true;\r\n } else {\r\n injection.InjectedFluidsOtherSources = null;\r\n }\r\n }\r\n\r\n if (injection.FormationIds) {\r\n let formationNameList = injection.FormationIds.toUpperCase().split(',');\r\n\r\n //Moving the removal of spaces to after the split operation so that they don't get removed from the middle of names.\r\n for(let i=0; i < formationNameList.length; i++) {\r\n formationNameList[i] = formationNameList[i].trim();\r\n }\r\n\r\n let matchedFormationIdList = [];\r\n this.injectionIntervalDataColumns.FormationIds.options.forEach(option => {\r\n if (formationNameList.includes(option.label)) {\r\n let matchedIndex = formationNameList.indexOf(option.label);\r\n formationNameList.splice(matchedIndex, 1);\r\n matchedFormationIdList.push(option.value);\r\n }\r\n });\r\n injection.FormationIds = matchedFormationIdList.join(',');\r\n }\r\n\r\n return injection;\r\n }\r\n\r\n checkDatesMatch(date1, date2) {\r\n return new Date(date1).getTime() == new Date(date2).getTime();\r\n }\r\n\r\n async getExcelTemplate() {\r\n let dateBoundsFormResult = this.dateBoundsSelectionForm.value.dateBoundsSelectionForm;\r\n\r\n let combinedDataForms = []\r\n for (let i = 0; i < this.injectionDataForm.value.InjectionRows.length; i++) {\r\n combinedDataForms.push({ ...this.injectionDataForm.value.InjectionRows[i], ...this.injectionIntervalDataForm.value.InjectionRows[i], ...this.compositionDataForm.value.InjectionRows[i] })\r\n }\r\n\r\n let dataColumnsList = await this.injectionService.getCombinedDataColumnsList();\r\n\r\n this.excelImportService.generateTemplate(this.wellRecord, dateBoundsFormResult.BeginDate, dateBoundsFormResult.EndDate, 'daily', 'InjectionVolume', dataColumnsList, combinedDataForms);\r\n }\r\n\r\n async uploadExcelTemplate() {\r\n\r\n let dataColumnslist = await this.injectionService.getCombinedDataColumnsList();\r\n let config: any = {};\r\n\r\n config.data = {\r\n dataColumnsList: dataColumnslist,\r\n controllerName: \"injection\"\r\n };\r\n\r\n this.dialog.open(ImportExcelDataComponent, config);\r\n this.excelSubmitted = true;\r\n }\r\n\r\n doPresubmit() {\r\n //Avoid a dumb crash, in case the injection batch is null for some reason.\r\n if(this.injectionService.currentBatch.value != null) {\r\n let curBatch: InjectionDataBatch = this.injectionService.currentBatch.value;\r\n\r\n //We're not going to use forEach here, because we need the index as a variable anyway.\r\n for (let i=0; i < curBatch.Injections.length; i++) {\r\n let inj = curBatch.Injections[i];\r\n\r\n //Fill the injection record with data from the forms.\r\n this.fillInjectionWithFormContents(inj, i);\r\n }\r\n\r\n //Do the presubmit validation\r\n this.injectionService.doPresubmitValidation(this.injectionService.currentBatch.value);\r\n }\r\n }\r\n\r\n doSubmit() {\r\n\r\n let batch = this.injectionService.currentBatch.value;\r\n\r\n if(batch != null) {\r\n\r\n this.injectionService.SubmitBatch(batch);\r\n }\r\n }\r\n\r\n goNext(stepper: MatStepper) {\r\n stepper.next();\r\n }\r\n\r\n goBack(stepper: MatStepper) {\r\n stepper.previous();\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\nimport { first } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NewUserRequestModel } from '../_models/new-user-request-model';\r\n\r\nimport { ApiResultErrorDialogComponent } from '../api-result-error-dialog/api-result-error-dialog.component';\r\n\r\n@Component({\r\n selector: 'app-add-user',\r\n templateUrl: './add-user.component.html',\r\n styleUrls: ['./add-user.component.css']\r\n})\r\nexport class AddUserComponent implements OnInit {\r\n\r\n\r\n newUserForm: FormGroup;\r\n\r\n loading = false;\r\n submitted = false;\r\n returnUrl: string;\r\n error = \"\";\r\n\r\n public firstName: string = \"\";\r\n public lastName: string = \"\";\r\n public emailAddress: string = \"\";\r\n public password: string = \"\";\r\n public phoneNumber: string = \"\";\r\n\r\n constructor(private formBuilder: FormBuilder,\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private userAccountService: UserAccountService,\r\n protected dialog: MatDialog\r\n ) {\r\n\r\n this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';\r\n\r\n }\r\n\r\n onSubmit() {\r\n this.submitted = true;\r\n\r\n if (this.newUserForm.invalid) {\r\n return;\r\n }\r\n\r\n let reqModel: NewUserRequestModel = {\r\n firstName: this.f.firstName.value,\r\n lastName: this.f.lastName.value,\r\n email: this.f.emailAddress.value,\r\n password: this.f.password.value,\r\n phone: this.f.phoneNumber.value,\r\n operators: []\r\n };\r\n\r\n\r\n this.userAccountService.adminSubmitNewUser(reqModel).then(\r\n (res) => {\r\n if (!res.Success) {\r\n let errorObj = {\r\n Reasons: res.Reasons\r\n }\r\n this.dialog.open(ApiResultErrorDialogComponent, { data: errorObj });\r\n } else {\r\n this.router.navigate(['/admincp']);\r\n }\r\n }\r\n )\r\n }\r\n\r\n get f() { return this.newUserForm.controls; }\r\n\r\n ngOnInit(): void {\r\n this.newUserForm = this.formBuilder.group({\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n emailAddress: ['', Validators.required],\r\n password: ['', Validators.required],\r\n phoneNumber: ['', Validators.required]\r\n });\r\n }\r\n\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\nimport { SafeUser } from '../_models/safe-user';\r\nimport { UsersFilterModel } from '../_models/users-filter-model';\r\nimport { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableFilter } from 'mat-table-filter';\r\n\r\nimport { MassEmailService } from '../_services/mass-email.service';\r\nimport { MassEmailArgs } from '../_models/mass-email-args';\r\n\r\nimport { NewUserRequestModel } from '../_models/new-user-request-model';\r\nimport { APIOperationResult } from '../_models/apioperation-result';\r\n\r\n@Component({\r\n selector: 'app-admin-cp',\r\n templateUrl: './admin-cp.component.html',\r\n styleUrls: ['./admin-cp.component.css']\r\n})\r\nexport class AdminCpComponent implements OnInit {\r\n\r\n public displayedColumns: string[] = [\"UserId\", \"FirstName\", \"LastName\", \"Email\", \"IsApproved\", \"IsDenied\", \"Role\", \"OperationButtons\"];\r\n\r\n public userDataSource: MatTableDataSource;\r\n\r\n filterEntity: UsersFilterModel;\r\n\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n public massEmailFormModel: any = {\r\n Subject: \"\",\r\n Body: \"\"\r\n };\r\n\r\n public massEmailFormGroup: FormGroup;\r\n\r\n constructor(\r\n public userAccountService: UserAccountService,\r\n protected dialog: MatDialog,\r\n public massEmailService: MassEmailService,\r\n private formBuilder: FormBuilder\r\n ) {\r\n\r\n var initData = new Array();\r\n\r\n this.userDataSource = new MatTableDataSource(initData);\r\n\r\n this.userDataSource.filterPredicate = (data: SafeUser, filter: string) => {\r\n var ret: boolean = true;\r\n\r\n var filterObj: UsersFilterModel = JSON.parse(filter);\r\n\r\n function stringFilter(keyName) {\r\n try {\r\n var needle = filterObj[keyName];\r\n\r\n if (needle != undefined && needle != null && needle != \"\") {\r\n var haystack = data[keyName];\r\n var ind = haystack.indexOf(needle);\r\n\r\n if (ind == -1) {\r\n ret = false;\r\n }\r\n }\r\n }\r\n catch (ex) {\r\n\r\n }\r\n }\r\n stringFilter(\"FirstName\");\r\n stringFilter(\"LastName\");\r\n stringFilter(\"Email\");\r\n //stringFilter(\"Uicnumber\");\r\n //stringFilter(\"LeaseName\");\r\n //stringFilter(\"WellNumber\");\r\n //stringFilter(\"OperatorOperatorName\");\r\n\r\n //Filter on the exclude zero injections field.\r\n /*if (filterObj.ExcludeZeroInjections) {\r\n if (data.InjectionsCount == 0) {\r\n ret = false;\r\n }\r\n }*/\r\n\r\n return ret;\r\n };\r\n\r\n this.massEmailFormGroup = this.formBuilder.group(\r\n {\r\n 'ReturnAddress': [this.massEmailFormModel.ReturnAddress, [Validators.required]],\r\n 'Subject': [this.massEmailFormModel.Subject, [Validators.required]],\r\n 'Body': [this.massEmailFormModel.Body, [Validators.required]]\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.filterEntity = new UsersFilterModel();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.userAccountService.fetchAllUsers().then((result) => {\r\n this.userDataSource.data = result;\r\n this.userDataSource.sort = this.sort;\r\n this.userDataSource.filter = \"\";\r\n },\r\n (err) => {\r\n\r\n });\r\n }\r\n\r\n\r\n\r\n applyUserListFilter(event, fieldName: string) {\r\n this.userDataSource.filter = JSON.stringify(this.filterEntity);\r\n\r\n //Save the state of the filter form\r\n //this.saveFilterFormState();\r\n }\r\n\r\n filterFieldHandleClick(event: Event) {\r\n event.stopPropagation();\r\n }\r\n\r\n sendMassEmail() {\r\n let args = new MassEmailArgs();\r\n\r\n let value = this.massEmailFormGroup.value;\r\n\r\n args.ReturnAddress = value.ReturnAddress;\r\n args.Subject = value.Subject;\r\n args.Body = value.Body;\r\n\r\n this.massEmailService.sendEmail(args).then(() => {\r\n alert(\"Success!\");\r\n },\r\n (err) => {\r\n alert(\"Error occurred. Message may not have been sent.\")\r\n });\r\n\r\n\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\nimport { SafeUser } from '../_models/safe-user';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { UserOperatorsEditService } from '../_services/user-operators-edit.service';\r\n\r\n@Component({\r\n selector: 'app-admin-edit-user',\r\n templateUrl: './admin-edit-user.component.html',\r\n styleUrls: ['./admin-edit-user.component.css']\r\n})\r\nexport class AdminEditUserComponent implements OnInit {\r\n\r\n public userId: number;\r\n\r\n public userDetails: SafeUser = null;\r\n formGroup: FormGroup;\r\n\r\n public operatorJunctions: Array = new Array([]);\r\n\r\n constructor(\r\n private actRoute: ActivatedRoute,\r\n private formBuilder: FormBuilder,\r\n public userAccountService: UserAccountService,\r\n public userOperatorsEditService: UserOperatorsEditService,\r\n public dialog: MatDialog\r\n )\r\n {\r\n this.userId = this.actRoute.snapshot.params.userid;\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n //Fetch the user data\r\n this.userAccountService.adminFetchUser(this.userId).then((result: SafeUser) => {\r\n this.userDetails = result;\r\n\r\n var IsDenied = false;\r\n var IsApproved = false;\r\n var IsConfirmed = false;\r\n\r\n if (this.userDetails.IsConfirmed) IsConfirmed = false;\r\n if (this.userDetails.IsApproved) IsApproved = true;\r\n if (this.userDetails.IsDenied) IsDenied = true;\r\n\r\n //Build the form\r\n this.formGroup = this.formBuilder.group(\r\n {\r\n 'Id': [this.userDetails.Id, []],\r\n 'Email': [{ value: this.userDetails.Email, disabled: true }, []],\r\n 'FirstName': [{ value: this.userDetails.FirstName, disabled: true }, []],\r\n 'LastName': [{ value: this.userDetails.LastName, disabled: true }, []],\r\n 'Phone': [{ value: this.userDetails.Phone, disabled: true }, []],\r\n 'IsConfirmed': [this.userDetails.IsConfirmed, []],\r\n 'IsApproved': [this.userDetails.IsApproved, []],\r\n 'IsDenied': [this.userDetails.IsDenied, []],\r\n 'Role': [this.userDetails.Role, []]\r\n }, {\r\n //validator: otherDataValidator()\r\n });\r\n },\r\n (err) => {\r\n });\r\n\r\n this.refreshOperators(); \r\n }\r\n\r\n roleCompareFunction(o1: any, o2: any) {\r\n return (o1 == o2);\r\n }\r\n\r\n saveChanges(): void {\r\n var updatedValue = this.formGroup.value;\r\n\r\n this.userAccountService.adminUpdateUser(updatedValue).then(() => {\r\n\r\n },\r\n (err) => {\r\n });\r\n }\r\n\r\n resendConfirmationEmail() {\r\n this.userAccountService.resendConfirmationEmail(this.userDetails.Id).then(() => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Success\",\r\n message: \"The confirmation email to this user was re-sent.\"\r\n }\r\n })\r\n },\r\n (err) => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Success\",\r\n message: \"The confirmation email to this user was re-sent.\"\r\n }\r\n });\r\n });\r\n }\r\n\r\n refreshOperators() {\r\n //Load the user's operators.\r\n this.userOperatorsEditService.fetchUserOperators(this.userId).then((result: Array) => {\r\n this.operatorJunctions = result;\r\n }); \r\n }\r\n\r\n deleteOperatorJunction(oprjct: any) {\r\n this.userOperatorsEditService.removeOperatorJunction(this.userId, oprjct.OperatorId).then(() => {\r\n this.refreshOperators();\r\n },\r\n () => {\r\n\r\n });\r\n }\r\n\r\n approveUser(jct: any) {\r\n this.userOperatorsEditService.approveUserForOperator(jct).then(() => {\r\n this.refreshOperators();\r\n },\r\n () => {\r\n this.refreshOperators();\r\n });\r\n }\r\n\r\n unapproveUser(jct: any) {\r\n this.userOperatorsEditService.unapproveUserForOperator(jct).then(() => {\r\n this.refreshOperators();\r\n },\r\n () => {\r\n this.refreshOperators();\r\n });\r\n }\r\n\r\n grantApprover(jct: any) {\r\n this.userOperatorsEditService.grantApproverForUser(jct).then(() => {\r\n this.refreshOperators();\r\n },\r\n () => {\r\n this.refreshOperators();\r\n });\r\n }\r\n\r\n revokeApprover(jct: any) {\r\n this.userOperatorsEditService.revokeApproverForUser(jct).then(() => {\r\n this.refreshOperators();\r\n },\r\n () => {\r\n this.refreshOperators();\r\n });\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { AssetsService } from '../_services/assets.service';\r\n\r\n@Component({\r\n selector: 'app-api-docs',\r\n templateUrl: './api-docs.component.html',\r\n styleUrls: ['./api-docs.component.css']\r\n})\r\nexport class ApiDocsComponent implements OnInit {\r\n\r\n public exportPOSTCode: string = \"\";\r\n public submitPOSTCode: string = \"\";\r\n public submitInjectionPressurePOSTCode = \"\";\r\n public deleteCode: string = \"\";\r\n public deleteInjectionPressureCode: string = \"\";\r\n\r\n constructor(assetsService: AssetsService)\r\n {\r\n assetsService.getAssetAsString(\"assets/APIExamples/ExportPOST.py.txt\").then((result) => {\r\n this.exportPOSTCode = result;\r\n });\r\n\r\n assetsService.getAssetAsString(\"assets/APIExamples/SubmitPOST.py.txt\").then((result) => {\r\n this.submitPOSTCode= result;\r\n });\r\n\r\n assetsService.getAssetAsString(\"assets/APIExamples/SubmitInjectionPressurePOST.py.txt\").then((result) => {\r\n this.submitInjectionPressurePOSTCode = result;\r\n });\r\n\r\n assetsService.getAssetAsString(\"assets/APIExamples/delete.py.txt\").then((result) => {\r\n this.deleteCode = result;\r\n });\r\n\r\n assetsService.getAssetAsString(\"assets/APIExamples/DeleteInjectionPressure.py.txt\").then((result) => {\r\n this.deleteInjectionPressureCode = result;\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { APIOperationResult } from '../_models/apioperation-result';\r\n\r\n@Component({\r\n selector: 'app-api-result-error-dialog',\r\n templateUrl: './api-result-error-dialog.component.html',\r\n styleUrls: ['./api-result-error-dialog.component.css']\r\n})\r\nexport class ApiResultErrorDialogComponent implements OnInit {\r\n\r\n mainFormGroup: FormGroup;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public apiResult: APIOperationResult\r\n )\r\n {\r\n }\r\n\r\n okClicked() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html'\r\n})\r\nexport class AppComponent {\r\n title = 'app';\r\n}\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { RouterModule } from '@angular/router';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\n\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatTableFilterModule } from 'mat-table-filter';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\n\r\nimport { HighlightModule, HIGHLIGHT_OPTIONS } from 'ngx-highlightjs';\r\n\r\nimport { NgDynamicBreadcrumbModule } from \"ng-dynamic-breadcrumb\";\r\nimport { JSZipObject } from 'jszip';\r\n\r\nimport { AppComponent } from './app.component';\r\nimport { NavMenuComponent } from './nav-menu/nav-menu.component';\r\nimport { HomeComponent } from './home/home.component';\r\nimport { WellDetailsComponent } from './well-details/well-details.component';\r\nimport { LoginComponent } from './login/login.component';\r\n\r\nimport { AuthGuard } from './_helpers/auth.guard';\r\nimport { RegisterComponent } from './register/register.component';\r\nimport { JWTInterceptor } from './_helpers/jwtinterceptor';\r\nimport { HttpErrorInterceptor } from './_helpers/http-error-interceptor';\r\nimport { OtherDataFormComponent } from './other-data-form/other-data-form.component';\r\nimport { FluidFractionFormComponent } from './fluid-fraction-form/fluid-fraction-form.component';\r\nimport { InjectionDataListComponent } from './injection-data-list/injection-data-list.component';\r\nimport { WellDetailsDisplayComponent } from './well-details-display/well-details-display.component';\r\nimport { ImportExcelDataComponent } from './import-excel-data/import-excel-data.component';\r\nimport * as JSZip from 'jszip';\r\nimport { MonthlyDateRangeSelectorComponent } from './monthly-date-range-selector/monthly-date-range-selector.component';\r\nimport { DailyDateRangeSelectorComponent } from './daily-date-range-selector/daily-date-range-selector.component';\r\nimport { BaseDateRangeSelectorComponent } from './base-date-range-selector/base-date-range-selector.component';\r\nimport { ExcelImportService } from './_services/excel-import.service';\r\nimport { InjectionRecordEditorComponent } from './injection-record-editor/injection-record-editor.component';\r\nimport { ApiResultErrorDialogComponent } from './api-result-error-dialog/api-result-error-dialog.component';\r\nimport { ErrorDialogComponent } from './error-dialog/error-dialog.component';\r\nimport { MessageDialogComponent } from './message-dialog/message-dialog.component';\r\nimport { UserConfirmComponent } from './user-confirm/user-confirm.component';\r\nimport { ApproverConfirmComponent } from './approver-confirm/approver-confirm.component';\r\nimport { InjectionFormationsEditorComponent } from './injection-formations-editor/injection-formations-editor.component';\r\nimport { UserSettingsComponent } from './user-settings/user-settings.component';\r\nimport { ExportDateRangeSelectorComponent } from './export-date-range-selector/export-date-range-selector.component';\r\nimport { ResetPasswordComponent } from './reset-password/reset-password.component';\r\nimport { ApproverCPComponent } from './approver-cp/approver-cp.component';\r\nimport { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\r\nimport { AuthenticationService } from './_services/authentication.service';\r\nimport { BrowseViewComponent } from './browse-view/browse-view.component';\r\nimport { AngularSplitModule } from 'angular-split';\r\nimport { BrowseWellDetailsComponent } from './browse-well-details/browse-well-details.component';\r\nimport { InjectionGraphComponent } from './injection-graph/injection-graph.component';\r\nimport { WelcomeDialogComponent } from './welcome-dialog/welcome-dialog.component';\r\nimport { ExportInProgressDialogComponent } from './export-in-progress-dialog/export-in-progress-dialog.component';\r\nimport { AdminCpComponent } from './admin-cp/admin-cp.component';\r\nimport { AdminEditUserComponent } from './admin-edit-user/admin-edit-user.component';\r\nimport { ApiDocsComponent } from './api-docs/api-docs.component';\r\nimport { SideloadInjectionComponent } from './sideload-injection/sideload-injection.component';\r\nimport { EditFormationsDialogComponent } from './edit-formations-dialog/edit-formations-dialog.component';\r\nimport { DeleteInjectionDialogComponent } from './delete-injection-dialog/delete-injection-dialog.component';\r\nimport { InjectionDensityDataGridComponent } from './injection-density-data-grid/injection-density-data-grid.component';\r\nimport { InjectionPressureDataGridComponent } from './injection-pressure-data-grid/injection-pressure-data-grid.component';\r\nimport { InjectionCompositionDataGridComponent } from './injection-composition-data-grid/injection-composition-data-grid.component';\r\nimport { InjectionIntervalDataGridComponent } from './injection-interval-data-grid/injection-interval-data-grid.component';\r\nimport { AddInjection2Component } from './add-injection2/add-injection2.component';\r\nimport { AddInjection2MonthlyComponent } from './add-injection2-monthly/add-injection2-monthly.component';\r\nimport { InjectionDataGrid2Component } from './injection-data-grid2/injection-data-grid2.component';\r\nimport { AddBHPComponent } from './add-bhp/add-bhp.component';\r\nimport { InjectionPresubmitDataTableComponent } from './injection-presubmit-data-table/injection-presubmit-data-table.component';\r\nimport { UserSubmittableDataGridComponent } from './user-submittable-data-grid/user-submittable-data-grid.component';\r\nimport { BhpDataGridComponent } from './bhp-data-grid/bhp-data-grid.component';\r\nimport { ValidationFailureReasonsDisplayComponent } from './validation-failure-reasons-display/validation-failure-reasons-display.component';\r\nimport { BhpPresubmitDataTableComponent } from './bhp-presubmit-data-table/bhp-presubmit-data-table.component';\r\nimport { InjectionPressureRecordEditorComponent } from './injection-pressure-record-editor/injection-pressure-record-editor.component';\r\nimport { HelpComponent } from './help/help.component';\r\nimport { FaqComponent } from './faq/faq.component';\r\nimport { FilterPipe } from './filter.pipe';\r\nimport { AddUserComponent } from './add-user/add-user.component';\r\nimport { WellLookupComponent } from './well-lookup/well-lookup.component';\r\nimport { SelectPeriodDialogComponent } from './select-period-dialog/select-period-dialog.component';\r\nimport { BhpPeriodMethodSelectorComponent } from './bhp-period-method-selector/bhp-period-method-selector.component';\r\nimport { BhpDialogComponent } from './bhp-dialog/bhp-dialog.component';\r\nimport { LoadingDialogComponent } from './loading-dialog/loading-dialog.component';\r\nimport { BrowseCardComponent } from './browse-card/browse-card.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n NavMenuComponent,\r\n HomeComponent,\r\n WellDetailsComponent,\r\n LoginComponent,\r\n RegisterComponent,\r\n OtherDataFormComponent,\r\n FluidFractionFormComponent,\r\n InjectionDataListComponent,\r\n WellDetailsDisplayComponent,\r\n ImportExcelDataComponent,\r\n MonthlyDateRangeSelectorComponent,\r\n DailyDateRangeSelectorComponent,\r\n BaseDateRangeSelectorComponent,\r\n InjectionRecordEditorComponent,\r\n ApiResultErrorDialogComponent,\r\n ErrorDialogComponent,\r\n MessageDialogComponent,\r\n UserConfirmComponent,\r\n ApproverConfirmComponent,\r\n InjectionFormationsEditorComponent,\r\n UserSettingsComponent,\r\n ExportDateRangeSelectorComponent,\r\n ResetPasswordComponent,\r\n ApproverCPComponent,\r\n ConfirmDialogComponent,\r\n BrowseViewComponent,\r\n BrowseWellDetailsComponent,\r\n InjectionGraphComponent,\r\n WelcomeDialogComponent,\r\n ExportInProgressDialogComponent,\r\n AdminCpComponent,\r\n AdminEditUserComponent,\r\n ExportInProgressDialogComponent,\r\n ApiDocsComponent,\r\n SideloadInjectionComponent,\r\n EditFormationsDialogComponent,\r\n DeleteInjectionDialogComponent,\r\n InjectionDensityDataGridComponent,\r\n InjectionPressureDataGridComponent,\r\n InjectionCompositionDataGridComponent,\r\n InjectionIntervalDataGridComponent,\r\n AddInjection2Component,\r\n InjectionDataGrid2Component,\r\n AddBHPComponent,\r\n InjectionPresubmitDataTableComponent,\r\n UserSubmittableDataGridComponent,\r\n BhpDataGridComponent,\r\n ValidationFailureReasonsDisplayComponent,\r\n BhpPresubmitDataTableComponent,\r\n InjectionPressureRecordEditorComponent,\r\n HelpComponent,\r\n FaqComponent,\r\n FilterPipe,\r\n AddUserComponent,\r\n WellLookupComponent,\r\n SelectPeriodDialogComponent,\r\n BhpPeriodMethodSelectorComponent,\r\n BhpDialogComponent,\r\n LoadingDialogComponent,\r\n AddInjection2MonthlyComponent,\r\n BrowseCardComponent\r\n ],\r\n imports: [\r\n BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),\r\n HttpClientModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RouterModule.forRoot([\r\n {\r\n path: '',\r\n component: BrowseViewComponent,\r\n pathMatch: 'full',\r\n data: {\r\n title: 'Home',\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'faq',\r\n component: FaqComponent,\r\n pathMatch: 'full',\r\n data: {\r\n title: 'FAQ',\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"FAQ & Glossary\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'help',\r\n component: HelpComponent,\r\n pathMatch: 'full',\r\n data: {\r\n title: 'Help',\r\n canActivate: [AuthGuard],\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"Help Videos\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'mywells',\r\n component: HomeComponent,\r\n pathMatch: 'full',\r\n data: {\r\n title: 'My Wells',\r\n canActivate: [AuthGuard],\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"My Wells\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'register',\r\n component: RegisterComponent,\r\n pathMatch: 'full',\r\n data: {\r\n title: 'Register',\r\n breadcrumb: [\r\n {\r\n label: \"Register\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'login',\r\n component: LoginComponent,\r\n pathMatch: 'full',\r\n data: {\r\n title: 'Login',\r\n breadcrumb: [\r\n {\r\n label: \"Login\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'resetpassword',\r\n component: ResetPasswordComponent,\r\n pathMatch: 'full',\r\n data: {\r\n title: 'Reset Password',\r\n breadcrumb: [\r\n {\r\n label: \"Reset Password\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'well/:wellId',\r\n component: WellDetailsComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n title: 'Well Details: {{Uicnumber}}',\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"My Wells\",\r\n url: \"/mywells\"\r\n },\r\n {\r\n label: \"Well Details: {{Uicnumber}}\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'well/:wellId/addinjectiondaily',\r\n component: AddInjection2Component,\r\n canActivate: [AuthGuard],\r\n data: {\r\n dateMode: \"daily\",\r\n title: 'Well Details',\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"My Wells\",\r\n url: \"/mywells\"\r\n },\r\n {\r\n label: \"Well Details: {{Uicnumber}}\",\r\n url: \"/well/:wellId\"\r\n },\r\n {\r\n label: \"Add Daily Injection Data\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'well/:wellId/addinjectionmonthly',\r\n component: AddInjection2MonthlyComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n dateMode: \"daily\",\r\n title: 'Well Details',\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"My Wells\",\r\n url: \"/mywells\"\r\n },\r\n {\r\n label: \"Well Details: {{Uicnumber}}\",\r\n url: \"/well/:wellId\"\r\n },\r\n {\r\n label: \"Add Monthly Injection Data\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'well/:wellId/addbhp',\r\n component: AddBHPComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n dateMode: \"daily\",\r\n title: 'Well Details',\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"My Wells\",\r\n url: \"/mywells\"\r\n },\r\n {\r\n label: \"Well Details: {{Uicnumber}}\",\r\n url: \"/well/:wellId\"\r\n },\r\n {\r\n label: \"Add BHP Data\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'well/:wellId/injection/:injectionId/edit',\r\n component: InjectionRecordEditorComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n dateMode: \"daily\",\r\n title: 'Edit',\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"My Wells\",\r\n url: \"/mywells\"\r\n },\r\n {\r\n label: \"Well Details: {{Uicnumber}}\",\r\n url: \"/well/:wellId\"\r\n },\r\n {\r\n label: \"Edit Injection: {{InjectionDate}}\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'well/:wellId/injectionpressure/:injectionPressureId/edit',\r\n component: InjectionPressureRecordEditorComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n dateMode: \"daily\",\r\n title: 'Edit',\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"My Wells\",\r\n url: \"/mywells\"\r\n },\r\n {\r\n label: \"Well Details: {{Uicnumber}}\",\r\n url: \"/well/:wellId\"\r\n },\r\n {\r\n label: \"Edit Injection Pressure: {{MeasurementDate}}\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'usersettings',\r\n component: UserSettingsComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n title: \"User Settings\",\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"User Settings\",\r\n url: \"\"\r\n },\r\n ]\r\n }\r\n },\r\n {\r\n path: 'userconfirm/:userid/:confirmationcode',\r\n component: UserConfirmComponent,\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"User Confirmation\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'approverconfirm/:userid/:operatorid/:confirmationcode/:approvedeny',\r\n component: ApproverConfirmComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"User Approval\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'approvercp',\r\n component: ApproverCPComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"Approver Control Panel\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'admincp',\r\n component: AdminCpComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"Admin Control Panel\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'admincp/user/new',\r\n component: AddUserComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"Admin Control Panel\",\r\n url: \"/admincp\"\r\n },\r\n {\r\n label: \"Add New User\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'lookupwell',\r\n component: WellLookupComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"Well Lookup\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'sideload',\r\n component: SideloadInjectionComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"Side Load Injection Data\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: 'admincp/user/:userid',\r\n component: AdminEditUserComponent,\r\n canActivate: [AuthGuard],\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"Admin Control Panel\",\r\n url: \"/admincp\"\r\n },\r\n {\r\n label: \"User Details\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n path: \"apidocs\",\r\n component: ApiDocsComponent,\r\n data: {\r\n breadcrumb: [\r\n {\r\n label: \"Home\",\r\n url: \"/\"\r\n },\r\n {\r\n label: \"API Documentation\",\r\n url: \"\"\r\n }\r\n ]\r\n }\r\n\r\n }\r\n ]),\r\n MatToolbarModule,\r\n MatTableModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatStepperModule,\r\n MatInputModule,\r\n MatFormFieldModule,\r\n MatSelectModule,\r\n MatRadioModule,\r\n MatCardModule,\r\n MatTableFilterModule,\r\n MatMenuModule,\r\n MatDialogModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatProgressBarModule,\r\n BrowserAnimationsModule,\r\n NgDynamicBreadcrumbModule,\r\n MatListModule,\r\n MatTooltipModule,\r\n MatTabsModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatSlideToggleModule,\r\n MatSidenavModule,\r\n AngularSplitModule,\r\n HighlightModule\r\n ],\r\n entryComponents: [\r\n ImportExcelDataComponent,\r\n InjectionRecordEditorComponent,\r\n ApiResultErrorDialogComponent,\r\n ExportDateRangeSelectorComponent,\r\n MessageDialogComponent,\r\n BrowseWellDetailsComponent\r\n ],\r\n providers: [\r\n { provide: HTTP_INTERCEPTORS, useClass: JWTInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: HttpErrorInterceptor, multi: true },\r\n {\r\n provide: HIGHLIGHT_OPTIONS,\r\n useValue: {\r\n coreLibraryLoader: () => import('highlight.js/lib/core'),\r\n lineNumbersLoader: () => import('highlightjs-line-numbers.js'), // Optional, only if you want the line numbers\r\n languages: {\r\n python: () => import('highlight.js/lib/languages/python')\r\n }\r\n }\r\n },\r\n MatDatepickerModule,\r\n MatMomentDateModule,\r\n ExcelImportService\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\n\r\n@Component({\r\n selector: 'app-approver-confirm',\r\n templateUrl: './approver-confirm.component.html',\r\n styleUrls: ['./approver-confirm.component.css']\r\n})\r\nexport class ApproverConfirmComponent implements OnInit {\r\n\r\n public userId: number;\r\n public operatorId: number;\r\n public confirmationCode: string;\r\n public approveDeny: string;\r\n\r\n public approveSuccess: boolean = false;\r\n\r\n constructor(\r\n private actRoute: ActivatedRoute,\r\n public userService: UserAccountService\r\n )\r\n {\r\n this.userId = this.actRoute.snapshot.params.userid;\r\n this.operatorId = this.actRoute.snapshot.params.operatorid;\r\n this.confirmationCode = this.actRoute.snapshot.params.confirmationcode;\r\n this.approveDeny = this.actRoute.snapshot.params.approvedeny;\r\n\r\n this.userService.approverConfirmUser(this.userId, this.operatorId, this.confirmationCode, this.approveDeny).then((result) => {\r\n this.approveSuccess = true;\r\n },\r\n (err) => {\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { OperatorApprovedUsersModel } from '../_models/operator-approved-users-model';\r\nimport { SafeUser } from '../_models/safe-user';\r\nimport { OperatorModel } from '../_models/operator-model';\r\nimport { AuthenticationService } from '../_services/authentication.service';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\n\r\n@Component({\r\n selector: 'app-approver-cp',\r\n templateUrl: './approver-cp.component.html',\r\n styleUrls: ['./approver-cp.component.css']\r\n})\r\nexport class ApproverCPComponent implements OnInit {\r\n\r\n public displayedColumns: string[] = [\"UserId\", \"FirstName\", \"LastName\", \"Email\", \"IsApproved\", \"IsDenied\", \"OperationButtons\"];\r\n\r\n public Operators: Array = new Array();\r\n\r\n constructor(\r\n public userAccountService: UserAccountService,\r\n public authenticationService: AuthenticationService,\r\n protected dialog: MatDialog\r\n )\r\n {\r\n\r\n this.authenticationService.currentUserSubject.subscribe((user) => {\r\n this.userAccountService.fetchMyApprovedUsers().then(\r\n (result) => {\r\n this.processMyApprovedUsersResults(result);\r\n },\r\n (err) => {\r\n\r\n });\r\n });\r\n\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n processMyApprovedUsersResults(results: Array) {\r\n\r\n results.forEach((operAppUserModel) => {\r\n var container = {\r\n operatorApprovedUsersModel: operAppUserModel,\r\n dataSource: new MatTableDataSource(operAppUserModel.Users)\r\n };\r\n\r\n this.Operators.push(container);\r\n });\r\n }\r\n\r\n approveUser(u: SafeUser, o: OperatorApprovedUsersModel) {\r\n \r\n this.userAccountService.approverConfirmUser(u.Id, o.Id, u.ApproverConfirmationCode, \"approve\").then((result) => {\r\n if (result.Success) {\r\n this.userAccountService.fetchSafeUser(u.Id, o.Id).then((safeUser) => {\r\n var keys = Object.keys(safeUser);\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n u[keys[i]] = safeUser[keys[i]];\r\n }\r\n },\r\n (err) => {\r\n });\r\n }\r\n },\r\n (err) => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Error\",\r\n message: \"Something went wrong while attempting to deny this user. Please refresh the page and try again.\"\r\n }\r\n });\r\n });\r\n \r\n }\r\n\r\n denyUser(u: SafeUser, o: OperatorApprovedUsersModel) {\r\n this.dialog.open(ConfirmDialogComponent, {\r\n data: {\r\n title: \"Confirm User Denial\",\r\n message: \"Are you sure you wish to deny this user access? The user will no longer be able to access the application.\"\r\n }\r\n }).afterClosed().subscribe(\r\n (result) => {\r\n if (result) {\r\n this.userAccountService.approverConfirmUser(u.Id, o.Id, u.ApproverConfirmationCode, \"deny\").then((result) => {\r\n this.userAccountService.fetchSafeUser(u.Id, o.Id).then((safeUser) => {\r\n var keys = Object.keys(safeUser);\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n u[keys[i]] = safeUser[keys[i]];\r\n }\r\n },\r\n (err) => {\r\n });\r\n },\r\n (err) => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Error\",\r\n message: \"Something went wrong while attempting to deny this user. Please refresh the page and try again.\"\r\n }\r\n });\r\n });\r\n }\r\n }\r\n );\r\n }\r\n}\r\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { TimeSpan } from '../_models/time-span';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-base-date-range-selector',\r\n templateUrl: './base-date-range-selector.component.html',\r\n styleUrls: ['./base-date-range-selector.component.css']\r\n})\r\nexport class BaseDateRangeSelectorComponent implements OnInit {\r\n\r\n dateBoundsSelectionForm: FormGroup;\r\n\r\n private _wellRecord: WellDetailsModel | any = 'no_record';\r\n\r\n private _mode = \"multi\";\r\n\r\n private _beginDateChangeSubscription: Subscription = null;\r\n\r\n @Input()\r\n public set wellRecord(newWellRecord: WellDetailsModel) {\r\n this._wellRecord = newWellRecord;\r\n\r\n if(this.dateBoundsSelectionForm != null) {\r\n this.dateBoundsSelectionForm.get(\"WellRecord\").setValue(this._wellRecord);\r\n }\r\n };\r\n\r\n public get wellRecord(): WellDetailsModel {\r\n return this._wellRecord;\r\n }\r\n\r\n @Input()\r\n public set mode(newMode: string) {\r\n if(newMode == 'multi' || newMode == 'single') {\r\n this._mode = newMode;\r\n\r\n this.updateEndDateForMode();\r\n }\r\n }\r\n\r\n public get mode() {\r\n return this._mode;\r\n }\r\n\r\n beginDate: Date;\r\n endDate: Date;\r\n\r\n constructor(\r\n protected formBuilder: FormBuilder\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n //Every implementation needs to produce a begin date and end date, and accept a well record.\r\n this.dateBoundsSelectionForm = this.formBuilder.group({\r\n 'BeginDate': [this.beginDate, []],\r\n 'EndDate': [this.endDate, []],\r\n 'WellRecord': [this.wellRecord, []]\r\n }, {\r\n validator: this.getTimespanOverlapValidator()\r\n });\r\n\r\n this._beginDateChangeSubscription = this.dateBoundsSelectionForm.controls['BeginDate'].valueChanges.subscribe((newValue) => {\r\n this.updateEndDateForBeginDateChange();\r\n });\r\n }\r\n\r\n ngOnDestroy():void {\r\n if(this._beginDateChangeSubscription == null) {\r\n this._beginDateChangeSubscription.unsubscribe();\r\n }\r\n this._beginDateChangeSubscription = null;\r\n }\r\n\r\n //Generates the validator for the time span forms\r\n getTimespanOverlapValidator() {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n var ret: any = {};\r\n\r\n var wr: WellDetailsModel| any = group.get(\"WellRecord\").value;\r\n var beginDate = group.get(\"BeginDate\").value;\r\n var endDate = group.get(\"EndDate\").value;\r\n\r\n if (wr == null || beginDate == null || endDate == null) {\r\n ret.loading = true;\r\n }\r\n else {\r\n\r\n var beginDateMidnight = new Date(beginDate.getFullYear(), beginDate.getMonth(), beginDate.getDate(), 0, 0, 0, 0);\r\n var endDateMidnight = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate(), 23, 59, 59, 999);\r\n\r\n beginDate = beginDateMidnight;\r\n endDate = endDateMidnight;\r\n\r\n if (beginDate.getTime() > endDate.getTime()) {\r\n ret.timespanReversed = true;\r\n }\r\n else if (wr !== 'no_record'){\r\n var proposedTS = new TimeSpan(beginDate, endDate);\r\n\r\n if (wr.Injections != null) {\r\n var injInts = wr.Injections.find((inj) => {\r\n\r\n var injTS = new TimeSpan(inj.InjectionDate, inj.EndDate);\r\n\r\n var intersect = proposedTS.Intersect(injTS);\r\n\r\n return intersect;\r\n });\r\n\r\n if (injInts != null) {\r\n ret.timespanOverlap = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n }\r\n\r\n updateEndDateForBeginDateChange() {\r\n if(this._mode == 'single') {\r\n this.updateEndDateForMode();\r\n }\r\n }\r\n\r\n updateEndDateForMode() {\r\n if(this.dateBoundsSelectionForm != null) {\r\n\r\n var beginDate = this.dateBoundsSelectionForm.controls[\"BeginDate\"].value;\r\n\r\n if(beginDate != null) {\r\n if(this._mode == 'single') {\r\n\r\n var newED = new Date(beginDate);\r\n\r\n newED.setHours(23);\r\n newED.setMinutes(59);\r\n newED.setSeconds(59);\r\n\r\n this.endDate = newED;\r\n\r\n \r\n }\r\n else if(this._mode == 'multi') {\r\n var newED = new Date(beginDate);\r\n\r\n var month = beginDate.getMonth();\r\n\r\n var taDate = new Date(beginDate.getFullYear(), month + 1, 0);\r\n\r\n var day = taDate.getDate();\r\n\r\n newED.setDate(day);\r\n \r\n newED.setHours(23);\r\n newED.setMinutes(59);\r\n newED.setSeconds(59);\r\n\r\n this.endDate = newED;\r\n }\r\n }\r\n\r\n \r\n this.dateBoundsSelectionForm.controls['EndDate'].setValue(this.endDate);\r\n }\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\n\r\nimport { BHPService } from '../_services/bhp.service';\r\nimport { InjectionService } from '../_services/injection.service';\r\n\r\nimport { UserSubmittableDataGridComponent } from '../user-submittable-data-grid/user-submittable-data-grid.component';\r\n\r\nimport { InjectionPressureDataBatch } from '../_models/injection-pressure-data-batch';\r\n\r\n@Component({\r\n selector: 'app-bhp-data-grid',\r\n templateUrl: './bhp-data-grid.component.html',\r\n styleUrls: ['./bhp-data-grid.component.css']\r\n})\r\nexport class BhpDataGridComponent extends UserSubmittableDataGridComponent implements OnInit {\r\n\r\n constructor(\r\n public bhpService: BHPService,\r\n public injectionService: InjectionService,\r\n formBuilder: FormBuilder\r\n ) {\r\n super(formBuilder, injectionService);\r\n\r\n this.DateFieldName = \"MeasurementDate\";\r\n\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, ViewChild, AfterViewInit, ChangeDetectorRef } from '@angular/core';\r\nimport { DailyDateRangeSelectorComponent } from '../daily-date-range-selector/daily-date-range-selector.component';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { BhpPeriodMethodSelectorComponent } from '../bhp-period-method-selector/bhp-period-method-selector.component'\r\nimport { BhpSelectorData } from '../_models/bhp-selector';\r\n\r\n@Component({\r\n selector: 'app-bhp-dialog',\r\n templateUrl: './bhp-dialog.component.html',\r\n styleUrls: ['./bhp-dialog.component.css']\r\n})\r\nexport class BhpDialogComponent implements OnInit {\r\n\r\n\r\n bhpSelectorData: BhpSelectorData = {};\r\n constructor(public dialogRef: MatDialogRef) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n btnClicked(name) {\r\n if (name == 'Cancel') {\r\n this.dialogRef.close(null);\r\n }\r\n if (name == 'Create') {\r\n let result = {\r\n method: this.bhpSelectorData.methodId,\r\n beginDate: this.bhpSelectorData.beginDate,\r\n endDate: this.bhpSelectorData.endDate,\r\n useLastInjData: this.bhpSelectorData.useLastInjData\r\n }\r\n this.dialogRef.close(result);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, OnInit, ViewChild, AfterViewInit, Input, ChangeDetectorRef } from '@angular/core';\r\nimport { DailyDateRangeSelectorComponent } from '../daily-date-range-selector/daily-date-range-selector.component';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { BhpSelectorData } from '../_models/bhp-selector';\r\n\r\n@Component({\r\n selector: 'app-bhp-period-method-selector',\r\n templateUrl: './bhp-period-method-selector.component.html',\r\n styleUrls: ['./bhp-period-method-selector.component.css']\r\n})\r\nexport class BhpPeriodMethodSelectorComponent implements OnInit {\r\n\r\n @ViewChild(\"dateRangeSelector\") dateRangeSelector: DailyDateRangeSelectorComponent;\r\n\r\n beginDate: BehaviorSubject = new BehaviorSubject(null);\r\n endDate: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n beginDateSubscription: Subscription;\r\n endDateSubscription: Subscription;\r\n measurementMethodSubscription: Subscription;\r\n useOldDataSubscription: Subscription;\r\n\r\n dateBoundsSelectionForm: FormGroup;\r\n methodForm: FormGroup;\r\n useOldDataForm: FormGroup;\r\n\r\n dateRangeMode: string = \"multi\";\r\n\r\n @Input()\r\n bhpSelectorData: BhpSelectorData;\r\n\r\n constructor(private formBuilder: FormBuilder, private cdr: ChangeDetectorRef) { }\r\n\r\n ngOnInit(): void {\r\n this.dateBoundsSelectionForm = this.formBuilder.group({\r\n });\r\n\r\n this.useOldDataForm = this.formBuilder.group({\r\n 'useOldInjectionValues': [false, []]\r\n });\r\n\r\n this.useOldDataSubscription = this.useOldDataForm.controls['useOldInjectionValues'].valueChanges.subscribe((newValue) => {\r\n\r\n this.bhpSelectorData.useLastInjData = newValue;\r\n });\r\n\r\n\r\n this.methodForm = this.formBuilder.group({\r\n 'bhpMeasurementMethod': [null, Validators.required]\r\n });\r\n\r\n this.measurementMethodSubscription = this.methodForm.controls['bhpMeasurementMethod'].valueChanges.subscribe((newValue) => {\r\n\r\n if (newValue == 1 || newValue == 2) {\r\n this.dateRangeMode = \"single\";\r\n }\r\n else if (newValue == 3) {\r\n this.dateRangeMode = \"multi\";\r\n }\r\n this.bhpSelectorData.methodId = newValue;\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initDateBoundsSelectionForm();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n initDateBoundsSelectionForm() {\r\n this.dateBoundsSelectionForm.addControl('dateBoundsSelectionForm', this.dateRangeSelector.dateBoundsSelectionForm);\r\n\r\n this.beginDateSubscription = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").valueChanges.subscribe((newValue) => {\r\n this.beginDate.next(newValue);\r\n this.bhpSelectorData.beginDate = newValue;\r\n });\r\n\r\n this.endDateSubscription = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").valueChanges.subscribe((newValue) => {\r\n this.endDate.next(newValue);\r\n this.bhpSelectorData.endDate = newValue;\r\n });\r\n\r\n //We have to manually grab these values initially.\r\n\r\n let initBeginDate = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").value;\r\n this.beginDate.next(initBeginDate);\r\n this.bhpSelectorData.beginDate = initBeginDate;\r\n\r\n\r\n let initEndDate = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").value;\r\n this.endDate.next(initEndDate);\r\n this.bhpSelectorData.endDate = initEndDate;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.beginDateSubscription != null) {\r\n this.beginDateSubscription.unsubscribe();\r\n\r\n this.beginDateSubscription = null;\r\n }\r\n\r\n if (this.endDateSubscription != null) {\r\n this.endDateSubscription.unsubscribe();\r\n\r\n this.endDateSubscription = null;\r\n }\r\n\r\n if (this.measurementMethodSubscription != null) {\r\n this.measurementMethodSubscription.unsubscribe();\r\n }\r\n this.measurementMethodSubscription = null;\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\n\nimport { InjectionPressureDataRecord } from '../_models/injection-pressure-data-record';\nimport { InjectionPressureDataBatch } from '../_models/injection-pressure-data-batch';\n\n@Component({\n selector: 'app-bhp-presubmit-data-table',\n templateUrl: './bhp-presubmit-data-table.component.html',\n styleUrls: ['./bhp-presubmit-data-table.component.css']\n})\nexport class BhpPresubmitDataTableComponent implements OnInit {\n\n public displayedColumns = [\n \"MeasurementDate\",\n \"ShutinBHPQuarterlyCalc\",\n \"ShutinBHPQuarterlyMeas\",\n \"ShutinBHPDaily\",\n \"TvdDepBHPSensor\",\n \"MeaDayInjLiqDens\",\n \"AveDayMeasBhp\",\n \"MaxDayMeasBhp\",\n \"AveDayEstBhp\",\n \"MaxDayEstBhp\",\n \"ShutinTimeForStaticPress\"\n ];\n\n @Input()\n public bhpBatch: InjectionPressureDataBatch = null;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-browse-card',\r\n templateUrl: './browse-card.component.html',\r\n styleUrls: ['./browse-card.component.css']\r\n})\r\nexport class BrowseCardComponent implements OnInit {\r\n\r\n @Input() public title;\r\n @Input() public relevantWells;\r\n @Input() public availableRecords;\r\n @Input() public color;\r\n\r\n @Output() export = new EventEmitter();\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n exportClicked() {\r\n this.export.emit(this.title);\r\n }\r\n\r\n}\r\n","import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';\r\n\r\nimport WebMap from '@arcgis/core/WebMap';\r\nimport MapView from '@arcgis/core/views/MapView';\r\nimport LayerList from '@arcgis/core/widgets/LayerList';\r\nimport MapImageLayer from '@arcgis/core/layers/MapImageLayer';\r\nimport FeatureLayer from '@arcgis/core/layers/FeatureLayer';\r\nimport Sublayer from '@arcgis/core/layers/support/Sublayer';\r\nimport Graphic from '@arcgis/core/Graphic';\r\nimport GraphicsLayer from '@arcgis/core/layers/GraphicsLayer';\r\nimport Sketch from '@arcgis/core/widgets/Sketch';\r\nimport SketchViewModel from '@arcgis/core/widgets/Sketch/SketchViewModel';\r\nimport TimeSlider from '@arcgis/core/widgets/TimeSlider';\r\nimport { AssetsService } from '../_services/assets.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport TimeExtent from '@arcgis/core/TimeExtent';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { time } from 'console';\r\nimport { ExportManagerService } from '../_services/export-manager.service';\r\nimport { ExportInjectionPressureManagerService } from '../_services/export-injection-pressure-manager.service';\r\nimport { ExportRequest } from '../_models/export-request';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { BrowseWellDetailsComponent } from '../browse-well-details/browse-well-details.component';\r\nimport { BrowseMapImageServiceLayerService } from '../_services/browse-map-image-service-layer.service';\r\nimport { WelcomeDialogComponent } from '../welcome-dialog/welcome-dialog.component';\r\nimport { BrowseCardComponent } from '../browse-card/browse-card.component';\r\nimport { ExportCountResult } from '../_models/export-count-result';\r\n\r\nimport * as reactiveUtils from \"@arcgis/core/core/reactiveUtils\";\r\n\r\nimport { MatDrawer } from \"@angular/material/sidenav\";\r\n\r\n@Component({\r\n selector: 'app-browse-view',\r\n templateUrl: './browse-view.component.html',\r\n styleUrls: ['./browse-view.component.css']\r\n})\r\nexport class BrowseViewComponent implements OnInit {\r\n\r\n protected _basemap: string = \"topo\";\r\n\r\n protected _center = [-97.5, 31.4];\r\n\r\n protected _zoom: number = 7;\r\n\r\n public aoiGraphicSubject = new BehaviorSubject(null);\r\n\r\n public aoiSelectedWellsResult = new BehaviorSubject(null);\r\n public aoiInjectionPressureWellsResult = new BehaviorSubject(null);\r\n\r\n public exportRecordCount = new BehaviorSubject(0);\r\n public exportInjectionPressureRecordCount = new BehaviorSubject(0);\r\n\r\n protected INJECTION_VOLUME_WELLS_LAYER_ID = 0;\r\n protected INJECTION_PRESSURE_WELLS_LAYER_ID = 2;\r\n\r\n\r\n protected _fullTimeExtent: TimeExtent = new TimeExtent({\r\n start: new Date(2015, 0, 1, 0, 0, 0, 0),\r\n end: new Date()\r\n });\r\n\r\n protected _timeExtent: TimeExtent = new TimeExtent({\r\n start: new Date(2015, 0, 1, 0, 0, 0, 0),\r\n end: new Date()\r\n });\r\n\r\n _map: WebMap;\r\n _mapView: MapView;\r\n _imageLayer: MapImageLayer;\r\n _layerList: LayerList = null;\r\n _sketch: Sketch = null;\r\n _timeSlider: TimeSlider = null;\r\n _aoiSketch: SketchViewModel;\r\n _injectionVolumeWellsLayer: Sublayer = null;\r\n _injectionPressureWellsLayer: Sublayer = null;\r\n\r\n _aoiSketchGraphicsLayer: GraphicsLayer = null;\r\n\r\n _fetchAoiDataTimeout = null;\r\n _fetchAoiStatsTimeout = null;\r\n\r\n @ViewChild('mapViewNode', {}) protected mapViewEl: ElementRef;\r\n\r\n @ViewChild('legendSidenav', {}) protected legendSidenav: MatDrawer;\r\n\r\n public get fullBeginTime(): Date {\r\n return this._fullTimeExtent.start;\r\n }\r\n\r\n public set fullBeginTime(newVal: Date) {\r\n this._fullTimeExtent.start = newVal;\r\n }\r\n\r\n public get fullEndTime(): Date {\r\n return this._fullTimeExtent.end;\r\n }\r\n\r\n public set fullEndTime(newVal: Date) {\r\n this._fullTimeExtent.end;\r\n }\r\n\r\n public get beginTime(): Date {\r\n return this._timeExtent.start;\r\n }\r\n\r\n public set beginTime(newVal: Date) {\r\n this._timeExtent.start = newVal;\r\n }\r\n\r\n public get endTime(): Date {\r\n return this._timeExtent.end;\r\n }\r\n\r\n public set endTime(newVal: Date) {\r\n this._timeExtent.end = newVal;\r\n }\r\n\r\n constructor(\r\n public assetsService: AssetsService,\r\n public exportService: ExportManagerService,\r\n public exportInjectionPressureManagerService: ExportInjectionPressureManagerService,\r\n public matDialog: MatDialog,\r\n public browseMapImageServiceLayerService: BrowseMapImageServiceLayerService\r\n ) {\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Set type for Map constructor properties\r\n const mapProperties = {\r\n basemap: this._basemap\r\n };\r\n\r\n this._map = new WebMap(mapProperties);\r\n\r\n // Set type for MapView constructor properties\r\n const mapViewProperties = {\r\n container: this.mapViewEl.nativeElement,\r\n center: this._center,\r\n zoom: this._zoom,\r\n map: this._map\r\n };\r\n\r\n this._mapView = new MapView(mapViewProperties);\r\n\r\n //Create the layer list\r\n this._layerList = new LayerList({\r\n view: this._mapView,\r\n listItemCreatedFunction: function (event) {\r\n\r\n //This section forces the layer list to behave like a legend, with the swatches and so forth...\r\n const item = event.item;\r\n\r\n if (item.layer.type != undefined && item.layer.type != \"group\" && item.layer.type != \"graphics\") {\r\n item.panel = {\r\n content: \"legend\",\r\n open: true\r\n }\r\n }\r\n },\r\n container: \"legend-container\"\r\n });\r\n\r\n reactiveUtils.on(() => this._mapView.popup, \"trigger-action\", (event) => {\r\n var feature = this._mapView.popup.selectedFeature;\r\n\r\n if (event.action.id == \"well-details\") {\r\n //Launch the well details.\r\n var graphic = this._mapView.popup.selectedFeature;\r\n this.launchWellDetails(graphic);\r\n }\r\n\r\n if (event.action.id == \"export-data\") {\r\n var graphic = this._mapView.popup.selectedFeature;\r\n this.exportDataForWell(graphic);\r\n }\r\n\r\n if (event.action.id == \"export-pressure-data\") {\r\n var graphic = this._mapView.popup.selectedFeature;\r\n this.exportPressureDataForWell(graphic);\r\n }\r\n });\r\n\r\n //Create the AOI Sketch, for later.\r\n this.initAOIDrawing();\r\n\r\n //Initialize the time slider\r\n this.initTimeSlider();\r\n\r\n this.initBasinsLayer();\r\n\r\n //Add the SRAs group layer. The layers\r\n this.initSIRsGroupLayer();\r\n\r\n //Add the SRAs group layer. The layers\r\n this.initSRAsGroupLayer();\r\n\r\n //Set up the stations layer\r\n this.initStationsLayer();\r\n\r\n //Finally, set up our image layer, which is the data source\r\n this.initMapImageLayer();\r\n\r\n //Launch the welcome dialog\r\n this.launchWelcomeDialog();\r\n }\r\n\r\n protected initTimeSlider() {\r\n\r\n var stopsInterval: any = {\r\n value: 1,\r\n unit: \"months\"\r\n };\r\n\r\n //Set up the time slider\r\n this._timeSlider = new TimeSlider({\r\n container: \"timeSlider\",\r\n view: this._mapView,\r\n fullTimeExtent: this._fullTimeExtent,\r\n timeExtent: this._timeExtent,\r\n stops: stopsInterval\r\n });\r\n\r\n var _this = this;\r\n\r\n this._timeSlider.watch(\"timeExtent\", function () {\r\n\r\n var teSlider = _this._timeSlider.timeExtent;\r\n _this.beginTime = teSlider.start;\r\n _this.endTime = teSlider.end;\r\n\r\n //Reload the AOI data\r\n _this.fetchAoiData();\r\n });\r\n }\r\n\r\n protected initMapImageLayer() {\r\n\r\n this.browseMapImageServiceLayerService.currentMapImageService.subscribe((imgLyr) => {\r\n if(imgLyr != null) {\r\n if (this._imageLayer != null) {\r\n //If our instance handle on the image layer isn't null, we need to remove the old one before we start using this new one...\r\n this._map.remove(this._imageLayer);\r\n }\r\n\r\n //Save the handle on the image layer.\r\n this._imageLayer = imgLyr;\r\n\r\n\r\n this._imageLayer.when((imageLayer) => {\r\n if (imageLayer.timeInfo != null && imageLayer.timeInfo.fullTimeExtent != null) {\r\n var fullTimeExtent = imageLayer.timeInfo.fullTimeExtent;\r\n\r\n fullTimeExtent.start = new Date(2016, 0, 1);\r\n fullTimeExtent.end = new Date();\r\n\r\n this._fullTimeExtent.start = fullTimeExtent.start;\r\n this._fullTimeExtent.end = fullTimeExtent.end;\r\n\r\n this._timeExtent.start = fullTimeExtent.start;\r\n this._timeExtent.end = fullTimeExtent.end;\r\n }\r\n });\r\n\r\n this._imageLayer.when((layer: MapImageLayer) => {\r\n this.initPopupTemplates(layer);\r\n\r\n //Get a handle on the wells layer\r\n this._injectionVolumeWellsLayer = layer.allSublayers.find((sl: Sublayer) => {\r\n var ret = false;\r\n if (sl.id == this.INJECTION_VOLUME_WELLS_LAYER_ID) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n });\r\n\r\n //Get a handle on the wells layer\r\n this._injectionPressureWellsLayer = layer.allSublayers.find((sl: Sublayer) => {\r\n var ret = false;\r\n if (sl.id == this.INJECTION_PRESSURE_WELLS_LAYER_ID) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n });\r\n\r\n //Fetch the AOI data, now that we should have a layer for it.\r\n this.fetchAoiData()\r\n\r\n });\r\n\r\n this._map.add(this._imageLayer);\r\n }\r\n });\r\n }\r\n\r\n protected initStationsLayer() {\r\n var fl = new FeatureLayer({\r\n url: \"https://maps.texnet.beg.utexas.edu/arcgis/rest/services/catalog/TexNetCatalog/FeatureServer/2\",\r\n visible: false\r\n });\r\n\r\n this._map.add(fl, );\r\n }\r\n\r\n protected initSIRsGroupLayer() {\r\n var fl = new MapImageLayer({\r\n url: \"https://maps.texnet.beg.utexas.edu/arcgis/rest/services/sra/sir/MapServer\",\r\n title: \"Seismic Investigation Regions\",\r\n visible: true\r\n });\r\n\r\n var ind = this._map.layers.length - 1;\r\n\r\n this._map.add(fl, ind);\r\n }\r\n\r\n protected initSRAsGroupLayer() {\r\n var fl = new MapImageLayer({\r\n url: \"https://maps.texnet.beg.utexas.edu/arcgis/rest/services/sra/sra/MapServer\",\r\n title: \"Seismic Response Areas\",\r\n visible: true\r\n });\r\n\r\n var ind = this._map.layers.length - 1;\r\n\r\n this._map.add(fl, ind);\r\n }\r\n\r\n protected initBasinsLayer() {\r\n var fl = new MapImageLayer({\r\n url: \"https://maps.texnet.beg.utexas.edu/arcgis/rest/services/BasinsAndPlays/MapServer\",\r\n title: \"Texas Basins and Plays\",\r\n visible: false\r\n });\r\n\r\n var ind = this._map.layers.length - 1;\r\n\r\n this._map.add(fl, ind);\r\n }\r\n\r\n protected initPopupTemplates(layer: MapImageLayer) {\r\n if (layer != null) {\r\n layer.sublayers.forEach((sublayer: Sublayer) => {\r\n\r\n if (sublayer.id == this.INJECTION_VOLUME_WELLS_LAYER_ID) {\r\n this.assetsService.getAssetAsJson(\"assets/PopupTemplates/disposalwells.json\").then((result) => {\r\n sublayer.popupTemplate = result;\r\n },\r\n (error) => {\r\n var q = 0;\r\n });\r\n }\r\n else if(sublayer.id == this.INJECTION_PRESSURE_WELLS_LAYER_ID) {\r\n this.assetsService.getAssetAsJson(\"assets/PopupTemplates/injectionpressurewells.json\").then((result) => {\r\n sublayer.popupTemplate = result;\r\n },\r\n (error) => {\r\n var q = 0;\r\n });\r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n protected initAOIDrawing() {\r\n this._aoiSketchGraphicsLayer = new GraphicsLayer({\r\n listMode: \"hide\"\r\n });\r\n\r\n\r\n var polygonSymbol: any = {\r\n type: \"simple-fill\", // autocasts as new SimpleMarkerSymbol()\r\n color: \"rgba(200,0,0, 0.25)\",\r\n style: \"solid\",\r\n outline: {\r\n color: \"red\",\r\n width: 2\r\n }\r\n };\r\n\r\n this._aoiSketch = new SketchViewModel({\r\n view: this._mapView,\r\n layer: this._aoiSketchGraphicsLayer,\r\n polygonSymbol: polygonSymbol,\r\n updateOnGraphicClick: false\r\n });\r\n\r\n this._map.add(this._aoiSketchGraphicsLayer);\r\n\r\n this._aoiSketch.on(\"create\", (event) => {\r\n if (event.state === \"complete\") {\r\n this.handleAOIDrawComplete(event);\r\n }\r\n });\r\n\r\n //Listen to the AOI graphic subject and call \r\n this.aoiGraphicSubject.subscribe((newAoi) => {\r\n if (this._aoiSketchGraphicsLayer != null) {\r\n\r\n //Remove any previously existing graphics.\r\n this._aoiSketchGraphicsLayer.removeAll();\r\n\r\n if (newAoi != null) {\r\n\r\n this._aoiSketchGraphicsLayer.add(newAoi);\r\n }\r\n\r\n this.fetchAoiData();\r\n }\r\n });\r\n }\r\n\r\n protected handleAOIDrawComplete(evt: any) {\r\n var poly = evt.graphic;\r\n\r\n this.setAOI(poly);\r\n }\r\n\r\n protected setAOI(poly: Graphic) {\r\n this.aoiGraphicSubject.next(poly);\r\n }\r\n\r\n public doAOISketch() {\r\n\r\n this.clearAOI();\r\n\r\n this._aoiSketch.create(\"polygon\");\r\n }\r\n\r\n public clearAOI() {\r\n\r\n this.aoiGraphicSubject.next(null);\r\n }\r\n\r\n protected launchWellDetails(well: Graphic) {\r\n this.matDialog.open(BrowseWellDetailsComponent, {\r\n data: {\r\n well: well,\r\n wellsLayer: this._injectionVolumeWellsLayer,\r\n timeExtent: this._timeExtent\r\n }\r\n });\r\n }\r\n\r\n protected fetchAoiData() {\r\n\r\n //If we had a timeout already set, abort.\r\n if (this._fetchAoiDataTimeout != null) {\r\n clearTimeout(this._fetchAoiDataTimeout);\r\n this._fetchAoiDataTimeout = null;\r\n }\r\n\r\n this._fetchAoiDataTimeout = setTimeout(() => {\r\n\r\n if (this._injectionVolumeWellsLayer != null) {\r\n var query = this._injectionVolumeWellsLayer.createQuery();\r\n\r\n if (this.aoiGraphicSubject.value != null) {\r\n query.geometry = this.aoiGraphicSubject.value.geometry;\r\n }\r\n\r\n query.timeExtent = this._timeExtent;\r\n query.outFields = [\"Id\"];\r\n\r\n //Add a where clause to reflect any additional parameters.\r\n\r\n //Run the query...\r\n this._injectionVolumeWellsLayer.queryFeatures(query).then((result) => {\r\n\r\n //Set the selected well set to our result.\r\n this.aoiSelectedWellsResult.next(result);\r\n\r\n this.fetchAoiStatistics();\r\n },\r\n (err) => {\r\n\r\n });\r\n }\r\n\r\n if (this._injectionPressureWellsLayer != null) {\r\n var query = this._injectionPressureWellsLayer.createQuery();\r\n\r\n if (this.aoiGraphicSubject.value != null) {\r\n query.geometry = this.aoiGraphicSubject.value.geometry;\r\n }\r\n\r\n query.timeExtent = this._timeExtent;\r\n query.outFields = [\"Id\"];\r\n\r\n //Add a where clause to reflect any additional parameters.\r\n\r\n //Run the query...\r\n this._injectionPressureWellsLayer.queryFeatures(query).then((result) => {\r\n\r\n //Set the selected well set to our result.\r\n this.aoiInjectionPressureWellsResult.next(result);\r\n\r\n this.fetchAoiStatistics();\r\n },\r\n (err) => {\r\n\r\n });\r\n }\r\n\r\n }, 750);\r\n\r\n }\r\n\r\n protected fetchAoiStatistics() {\r\n\r\n var injVolWellIds = this.getSelectedWellIds();\r\n\r\n var erInjectionVolume: ExportRequest = this.getExportRequest(injVolWellIds);\r\n\r\n this.exportService.exportCount(erInjectionVolume).then((result: ExportCountResult) => {\r\n this.exportRecordCount.next(result.Count);\r\n },\r\n (err) => {\r\n\r\n });\r\n\r\n var injPressureWellIds = this.getSelectedInjectionPressureWellIds();\r\n\r\n var erInjectionPressure: ExportRequest = this.getExportRequest(injPressureWellIds);\r\n\r\n this.exportInjectionPressureManagerService.exportCount(erInjectionPressure).then((result: ExportCountResult) => {\r\n this.exportInjectionPressureRecordCount.next(result.Count);\r\n },\r\n (err) => {\r\n\r\n });\r\n }\r\n\r\n protected getExportRequest(wellIds: Array): ExportRequest {\r\n\r\n var req: ExportRequest = new ExportRequest();\r\n\r\n req.WellIds = wellIds;\r\n\r\n var tes: Date = this._timeExtent.start;\r\n var tee: Date = this._timeExtent.end;\r\n\r\n var beginYear = tes.getFullYear();\r\n var beginMonth = tes.getMonth() + 1;\r\n var beginDay = tes.getDate();\r\n\r\n var endYear = tee.getFullYear();\r\n var endMonth = tee.getMonth() + 1;\r\n var endDay = tee.getDate();\r\n\r\n req.BeginYear = beginYear;\r\n req.BeginMonth = beginMonth;\r\n req.EndYear = endYear;\r\n req.EndMonth = endMonth;\r\n\r\n //At some point, we should maybe consider making this selectable, particularly if we start offering other formats.\r\n req.Format = \"excel\";\r\n\r\n return req;\r\n }\r\n\r\n protected getSelectedWellIds(): Array {\r\n var wellIds = [];\r\n\r\n if (this.aoiSelectedWellsResult.value != null) {\r\n this.aoiSelectedWellsResult.value.features.forEach((feature) => {\r\n wellIds.push(feature.attributes.Id);\r\n });\r\n }\r\n\r\n return wellIds;\r\n }\r\n\r\n protected getSelectedInjectionPressureWellIds(): Array {\r\n var wellIds = [];\r\n\r\n if (this.aoiInjectionPressureWellsResult.value != null) {\r\n this.aoiInjectionPressureWellsResult.value.features.forEach((feature) => {\r\n wellIds.push(feature.attributes.Id);\r\n });\r\n }\r\n\r\n return wellIds;\r\n }\r\n\r\n public exportDataForWell(wellGraphic: Graphic) {\r\n var wellids = [wellGraphic.attributes.Id];\r\n\r\n this.exportDataForWellIds(wellids);\r\n }\r\n\r\n public exportPressureDataForWell(wellGraphic: Graphic) {\r\n var wellids = [wellGraphic.attributes.Id];\r\n\r\n this.exportPressureDataForWellIds(wellids);\r\n }\r\n\r\n public exportData() {\r\n var wellids = this.getSelectedWellIds();\r\n this.exportDataForWellIds(wellids);\r\n }\r\n\r\n public exportDataForWellIds(wellIds: Array) {\r\n\r\n var req: ExportRequest = this.getExportRequest(wellIds);\r\n\r\n this.exportService.export(req, true).then((result) => {\r\n //We don't actually have to do anything here. \r\n },\r\n (err) => {\r\n //Show an alert dialog, so we don't just leave the user hanging.\r\n this.matDialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Error\",\r\n message: \"Something went wrong while attempting to export your requested data. Please try the operation again.\"\r\n }\r\n });\r\n });\r\n }\r\n\r\n public exportPressureData() {\r\n var wellids = this.getSelectedInjectionPressureWellIds();\r\n this.exportPressureDataForWellIds(wellids);\r\n }\r\n\r\n public exportPressureDataForWellIds(wellIds) {\r\n var req: ExportRequest = this.getExportRequest(wellIds);\r\n\r\n this.exportInjectionPressureManagerService.export(req, true).then((result) => {\r\n //We don't actually have to do anything here. \r\n },\r\n (err) => {\r\n //Show an alert dialog, so we don't just leave the user hanging.\r\n this.matDialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Error\",\r\n message: \"Something went wrong while attempting to export your requested data. Please try the operation again.\"\r\n }\r\n });\r\n });\r\n }\r\n\r\n public launchWelcomeDialog() {\r\n //Show an alert dialog, so we don't just leave the user hanging.\r\n this.matDialog.open(WelcomeDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n\r\n public readyToExport(): boolean {\r\n var ret: boolean = false;\r\n\r\n if (this.aoiSelectedWellsResult.value != null &&\r\n this.aoiSelectedWellsResult.value.features != null &&\r\n this.aoiSelectedWellsResult.value.features.length > 0) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n }\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nimport Graphic from '@arcgis/core/Graphic';\r\nimport Sublayer from '@arcgis/core/layers/support/Sublayer';\r\nimport TimeExtent from '@arcgis/core/TimeExtent';\r\nimport { ExportRequest } from '../_models/export-request';\r\nimport { BrowseInjectionLayerService } from '../_services/browse-injection-layer.service';\r\nimport { BrowseMapImageServiceLayerService } from '../_services/browse-map-image-service-layer.service';\r\nimport { ExportManagerService } from '../_services/export-manager.service';\r\nimport { ExportInjectionPressureManagerService } from '../_services/export-injection-pressure-manager.service';\r\n\r\nimport { BHPService } from '../_services/bhp.service';\r\nimport { InjectionService } from '../_services/injection.service';\r\n\r\n@Component({\r\n selector: 'app-browse-well-details',\r\n templateUrl: './browse-well-details.component.html',\r\n styleUrls: ['./browse-well-details.component.css']\r\n})\r\nexport class BrowseWellDetailsComponent implements OnInit {\r\n\r\n public wellGraphic: Graphic;\r\n public wellsLayer: Sublayer;\r\n public timeExtent: TimeExtent;\r\n public injectionLayer: Sublayer;\r\n\r\n public injectionRecords: Array;\r\n\r\n constructor(public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n public browseMapImageServiceLayerService: BrowseMapImageServiceLayerService,\r\n public browseInjectionLayerService: BrowseInjectionLayerService,\r\n public injectionService: InjectionService,\r\n public bhpService: BHPService,\r\n public exportService: ExportManagerService,\r\n public exportInjectionPressureManagerService: ExportInjectionPressureManagerService\r\n )\r\n {\r\n //Grab the well graphic.\r\n this.wellGraphic = data.well; \r\n this.timeExtent = data.timeExtent;\r\n\r\n this.injectionService.GetInjectionData(this.wellGraphic.attributes.Id);\r\n this.bhpService.GetInjectionPressureData(this.wellGraphic.attributes.Id);\r\n }\r\n\r\n ngOnInit(): void {\r\n /*this.browseInjectionLayerService.currentLayer.subscribe((injLayer) => {\r\n\r\n injLayer.when((il) => {\r\n\r\n //Handle the layer being initialized\r\n var query = injLayer.createQuery();\r\n\r\n query.where = \"WellId=\" + this.wellGraphic.attributes.Id;\r\n query.orderByFields = [\"InjectionDate\"];\r\n\r\n //Fetch the injection data for our well\r\n injLayer.queryFeatures(query).then((queryResult) => {\r\n this.injectionRecords = queryResult.features;\r\n });\r\n });\r\n });*/\r\n\r\n \r\n }\r\n\r\n public exportData() {\r\n var er: ExportRequest = new ExportRequest();\r\n\r\n er.WellIds = [this.wellGraphic.attributes.Id];\r\n\r\n\r\n var tes: Date = this.timeExtent.start;\r\n var tee: Date = this.timeExtent.end;\r\n\r\n var beginYear = tes.getFullYear();\r\n var beginMonth = tes.getMonth() + 1;\r\n var beginDay = tes.getDate();\r\n\r\n var endYear = tee.getFullYear();\r\n var endMonth = tee.getMonth() + 1;\r\n var endDay = tee.getDate();\r\n\r\n er.BeginYear = beginYear;\r\n er.BeginMonth = beginMonth; \r\n er.EndYear = endYear;\r\n er.EndMonth = endMonth;\r\n\r\n er.Format = \"excel\";\r\n\r\n this.exportService.export(er, true).then(() => {\r\n //No need to do anything here. The export service handles saving.\r\n });\r\n }\r\n\r\n public exportPressureData() {\r\n var er: ExportRequest = new ExportRequest();\r\n\r\n er.WellIds = [this.wellGraphic.attributes.Id];\r\n\r\n\r\n var tes: Date = this.timeExtent.start;\r\n var tee: Date = this.timeExtent.end;\r\n\r\n var beginYear = tes.getFullYear();\r\n var beginMonth = tes.getMonth() + 1;\r\n var beginDay = tes.getDate();\r\n\r\n var endYear = tee.getFullYear();\r\n var endMonth = tee.getMonth() + 1;\r\n var endDay = tee.getDate();\r\n\r\n er.BeginYear = beginYear;\r\n er.BeginMonth = beginMonth; \r\n er.EndYear = endYear;\r\n er.EndMonth = endMonth;\r\n\r\n er.Format = \"excel\";\r\n\r\n this.exportInjectionPressureManagerService.export(er, true).then(() => {\r\n //No need to do anything here. The export service handles saving.\r\n });\r\n }\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n@Component({\r\n selector: 'app-confirm-dialog',\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrls: ['./confirm-dialog.component.css']\r\n})\r\nexport class ConfirmDialogComponent implements OnInit {\r\n\r\n public title: string = \"Confirm?\";\r\n public message: string = \"Confirm this operation.\";\r\n public yesLabel: string = \"Yes\";\r\n public noLabel: string = \"No\";\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n public dialogRef: MatDialogRef)\r\n {\r\n if (data.title != null) this.title = data.title;\r\n\r\n if (data.message != null) this.message = data.message;\r\n\r\n if (data.yesLabel != null) this.yesLabel = data.yesLabel;\r\n\r\n if (data.noLabel != null) this.noLabel = data.noLabel;\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n close(value: boolean) {\r\n this.dialogRef.close(value);\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { BaseDateRangeSelectorComponent } from '../base-date-range-selector/base-date-range-selector.component';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { MatDatepicker } from '@angular/material/datepicker';\r\n\r\n@Component({\r\n selector: 'app-daily-date-range-selector',\r\n templateUrl: './daily-date-range-selector.component.html',\r\n styleUrls: ['./daily-date-range-selector.component.css']\r\n})\r\nexport class DailyDateRangeSelectorComponent extends BaseDateRangeSelectorComponent implements OnInit {\r\n\r\n beginDatepicker: MatDatepicker;\r\n endDatepicker: MatDatepicker;\r\n\r\n //Shamelessly borrowed from Stackoverflow\r\n protected firstDayInPreviousMonth(yourDate) {\r\n return new Date(yourDate.getFullYear(), yourDate.getMonth() - 1, 1);\r\n }\r\n\r\n protected lastDayInThatMonth(yourDate) {\r\n //Ugh, fine. We'll figure this out the hard way. The simple javascript-ey solution to figure out the last day of the month would fail in January, where it would overflow into the subsequent year.\r\n\r\n let nextMonth = yourDate.getMonth() + 1;\r\n let year = yourDate.getFullYear();\r\n\r\n let finalDate;\r\n \r\n\r\n if(nextMonth > 11) {\r\n let year = yourDate.getFullYear();\r\n finalDate = new Date(year, nextMonth, 0); \r\n }\r\n else {\r\n //For most cases, this works fine.\r\n finalDate = new Date(yourDate.getFullYear(), nextMonth, 0);\r\n }\r\n\r\n return finalDate;\r\n }\r\n\r\n constructor(\r\n formBuilder: FormBuilder\r\n ) {\r\n super(formBuilder);\r\n\r\n //What we're doing here is setting the beginning and ending dates to the first and last days of the previous month, which are the most likely dates that the user wants.\r\n /*this.beginDate = new Date();\r\n this.beginDate.setMonth(this.beginDate.getMonth() - 1)\r\n this.beginDate.setDate(1);*/\r\n\r\n let today = new Date();\r\n\r\n this.beginDate = this.firstDayInPreviousMonth(today);\r\n\r\n this.endDate = this.lastDayInThatMonth(this.beginDate);\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n }\r\n\r\n \r\n handleEndDateChange(event) {\r\n var _this = this;\r\n setTimeout(function () {\r\n _this.dateBoundsSelectionForm.get(\"EndDate\").setValue(event);\r\n });\r\n \r\n }\r\n\r\n handleBeginDateChange(event) {\r\n\r\n var _this = this;\r\n\r\n setTimeout(function () {\r\n _this.dateBoundsSelectionForm.get(\"BeginDate\").setValue(event);\r\n });\r\n \r\n }\r\n}\r\n","import { ViewChild, Inject } from '@angular/core';\r\nimport { Component, OnInit, AfterViewInit } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\nimport { UserWellsService } from '../user-wells.service';\n\nimport { DailyDateRangeSelectorComponent } from '../daily-date-range-selector/daily-date-range-selector.component';\n\n@Component({\n selector: 'app-delete-injection-dialog',\n templateUrl: './delete-injection-dialog.component.html',\n styleUrls: ['./delete-injection-dialog.component.css']\n})\nexport class DeleteInjectionDialogComponent implements OnInit {\n\n dateBoundsSelectionForm: FormGroup;\n\n @ViewChild(DailyDateRangeSelectorComponent) dateRangeSelector: DailyDateRangeSelectorComponent;\n\n constructor(\n private formBuilder: FormBuilder,\n public dialogRef: MatDialogRef,\r\n public userWellsService: UserWellsService,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) { }\n\n ngOnInit(): void {\n\r\n //Create the date bounds form - this is the formgroup for the first page\r\n this.dateBoundsSelectionForm = this.formBuilder.group({\r\n });\n }\n\n ngAfterViewInit(): void {\n this.dateBoundsSelectionForm.addControl('dateBoundsSelectionForm', this.dateRangeSelector.dateBoundsSelectionForm);\r\n }\n\n deleteClicked(): void {\n var value = this.dateBoundsSelectionForm.value;\r\n\r\n var beginDate = value.dateBoundsSelectionForm.BeginDate;\r\n var endDate = value.dateBoundsSelectionForm.EndDate;\r\n\r\n //If the begin date is less than the end date, switch them around.\r\n if (beginDate > endDate) {\r\n var tempDate = beginDate;\r\n beginDate = endDate;\r\n endDate = tempDate;\r\n }\r\n\r\n var returnDate = {\r\n beginDate: beginDate,\r\n endDate: endDate\r\n };\r\n \r\n this.dialogRef.close(returnDate);\r\n }\n\n}\n","import { Component, OnInit, Inject, AfterViewInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { FormationService } from '../_services/formation.service';\r\nimport { Formation } from '../_models/formation';\r\nimport { FormGroup, AbstractControl, FormBuilder } from '@angular/forms';\r\nimport { debounceTime, filter } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-edit-formations-dialog',\r\n templateUrl: './edit-formations-dialog.component.html',\r\n styleUrls: ['./edit-formations-dialog.component.css']\r\n})\r\nexport class EditFormationsDialogComponent implements OnInit {\r\n\r\n public well: WellDetailsModel;\r\n\r\n public selectedFormations: Array = new Array();\r\n public formationCandidates: Array = new Array();\r\n\r\n public formationsForm: FormGroup;\r\n\r\n public formationsFormModel: any = {\r\n searchFormationName: \"\"\r\n };\r\n\r\n public isUnchanged: boolean = true;\r\n\r\n get isReadyForSave(): boolean {\r\n var ret: boolean = false;\r\n\r\n if (this.selectedFormations != null && this.selectedFormations.length > 0) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n public formationService: FormationService,\r\n protected formBuilder: FormBuilder\r\n ) {\r\n this.well = this.data.well;\r\n\r\n var sf = [];\r\n\r\n //Copy the array of formations so we can cancel without it actually changing.\r\n for (var i = 0; i < this.data.well.Formations.length; i++) {\r\n var f = this.data.well.Formations[i];\r\n\r\n sf.push(f);\r\n }\r\n\r\n this.selectedFormations = sf;\r\n\r\n\r\n function selectedFormationsValidator() {\r\n return (control: AbstractControl) => {\r\n var ret: any = {};\r\n\r\n var formationsArray = control.value;\r\n\r\n if (formationsArray != null && formationsArray.length != null && formationsArray.length == 0) {\r\n ret.noOperators = true;\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n\r\n this.formationsForm = this.formBuilder.group({\r\n 'searchFormationName': [this.formationsFormModel.searchFormationName, []],\r\n 'selectedFormations': [this.selectedFormations, [selectedFormationsValidator()]]\r\n });\r\n\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n this.formationsForm.get(\"searchFormationName\").valueChanges.pipe(filter((val) => val.length === 6),\r\n debounceTime(500)).subscribe((x) => {\r\n this.updateFormationResults(x);\r\n });\r\n\r\n }\r\n\r\n public updateFormationResults(formationName: string) {\r\n //Perform the search\r\n this.formationService.searchByName(formationName).then((formationCandidates: Array) => {\r\n this.formationCandidates = formationCandidates;\r\n },\r\n (err) => {\r\n });\r\n }\r\n\r\n\r\n\r\n public selectFormation(formation: Formation) {\r\n var found = this.selectedFormations.find((x: Formation) => {\r\n var ret = false;\r\n\r\n if (x.Id == formation.Id) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n });\r\n\r\n if (found == null) {\r\n this.selectedFormations.push(formation);\r\n\r\n this.formationsForm.get(\"selectedFormations\").setValue(this.selectedFormations);\r\n\r\n this.isUnchanged = false;\r\n }\r\n }\r\n\r\n public removeFormation(formation: Formation) {\r\n var ind = this.selectedFormations.indexOf(formation);\r\n\r\n this.selectedFormations.splice(ind, 1);\r\n\r\n this.formationsForm.get(\"selectedFormations\").setValue(this.selectedFormations);\r\n\r\n this.isUnchanged = false;\r\n }\r\n\r\n public saveChanges() {\r\n this.dialogRef.close(this.selectedFormations);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-error-dialog',\r\n templateUrl: './error-dialog.component.html',\r\n styleUrls: ['./error-dialog.component.css']\r\n})\r\nexport class ErrorDialogComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, Inject } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { MonthlyDateRangeSelectorComponent } from '../monthly-date-range-selector/monthly-date-range-selector.component';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'app-export-date-range-selector',\r\n templateUrl: './export-date-range-selector.component.html',\r\n styleUrls: ['./export-date-range-selector.component.css']\r\n})\r\nexport class ExportDateRangeSelectorComponent implements OnInit, AfterViewInit {\r\n\r\n dateBoundsSelectionForm: FormGroup;\r\n\r\n @ViewChild(MonthlyDateRangeSelectorComponent) dateRangeSelector: MonthlyDateRangeSelectorComponent;\r\n\r\n constructor(private formBuilder: FormBuilder,\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n //Create the date bounds form - this is the formgroup for the first page\r\n this.dateBoundsSelectionForm = this.formBuilder.group({\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.dateBoundsSelectionForm.addControl('dateBoundsSelectionForm', this.dateRangeSelector.dateBoundsSelectionForm);\r\n });\r\n }\r\n\r\n okClick(): void {\r\n\r\n var dateBoundsResults:any = this.dateBoundsSelectionForm.getRawValue();\r\n\r\n var result = {\r\n BeginDate: dateBoundsResults.dateBoundsSelectionForm.BeginDate,\r\n EndDate: dateBoundsResults.dateBoundsSelectionForm.EndDate,\r\n };\r\n\r\n this.dialogRef.close(result);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-export-in-progress-dialog',\r\n templateUrl: './export-in-progress-dialog.component.html',\r\n styleUrls: ['./export-in-progress-dialog.component.css']\r\n})\r\nexport class ExportInProgressDialogComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, ViewChild, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-faq',\r\n templateUrl: './faq.component.html',\r\n styleUrls: ['./faq.component.css']\r\n})\r\nexport class FaqComponent implements OnInit {\r\n\r\n\r\n @ViewChild('mep')\r\n mep: ElementRef;\r\n\r\n scroll_y: number;\r\n searchTerm: String;\r\n\r\n @HostListener('window:scroll', ['$event']) // for window scroll events\r\n onScroll(event) {\r\n this.scroll_y = event.currentTarget.scrollY\r\n }\r\n\r\n selectedFAQ = [];\r\n CollapsedHeight: string = '50px';\r\n ExpandedHeight: string = '50px';\r\n\r\n contentList = [\r\n {\r\n title: 'Frequently Asked Questions',\r\n titleAbbreviated: 'FAQ',\r\n faq: [\r\n {\r\n question: `How are wells selected to report injection data?`,\r\n answer: `The Railroad Commission of Texas (RRC) has issued a Notice to Operators requesting certain SWDs to report to the TexNet Injection/Pressure Reporting Tool to assist the RRC in monitoring and responding to injection and reservoir conditions that may be conducive to induced seismicity or resulting in excessive reservoir pressures. RRC staff may also request operators by letter to report data to the Tool, typically because a well falls within an RRC-defined Seismic Investigation Region (SIR). More information on how RRC responds to seismicity can be found here.`\r\n },\r\n {\r\n question: `Am I requested to submit injection volume and pressure information to the TexNet Injection/Pressure Reporting Tool?`,\r\n answer: `Per the December 2023 Notice to Operators, if you are the operator of an SWD within the greater Permian Basin (Oil and Gas Districts 7C, 8, and 8A, and Fisher County in District 7B) with a permitted injection rate of 5,000 barrels / day or greater, you are requested to submit data to the TexNet Injection/Pressure Reporting Tool. Any other operator will be requested to report data to the Tool by a letter from RRC staff. If you’re still not sure if you are requested to report data to the Tool, you may contact the RRC at uic@rrc.texas.gov.`\r\n },\r\n {\r\n question: `I am having technical difficulties submitting data to the Texnet Injection/Pressure Reporting Tool. Who can I contact for help?`,\r\n answer: `For help using the application, please contact Aaron Averett at aaron.averett@beg.utexas.edu and CC the TexNet main email account at texnet@beg.utexas.edu.`\r\n },\r\n {\r\n question: `I have regulatory questions regarding the reporting requirements. Who can I contact to get these answered?`,\r\n answer: `For answers to policy questions related to the Tool, please contact staff of the Railroad Commission of Texas at uic@rrc.texas.gov.`\r\n },\r\n {\r\n question: `A well I am requested to report on does not appear in my list of wells. How do I get this fixed?`,\r\n answer: `This can happen for several reasons. Before requesting support, please try the following:`,\r\n list: [\r\n 'Make sure that you have properly filed the paperwork to document this change with RRC and that that paperwork has been processed.',\r\n `Make sure that you have cleared any search parameters you have previously entered while searching for other wells, including the “Exclude zero” checkbox`,\r\n `If you are sure that the required paperwork has been processed and you have cleared all of the search parameter fields, contact us for support.`]\r\n },\r\n {\r\n question: `If I need help using the application, or have a question not listed here, who can I contact?`,\r\n answer: `To request support with using the TexNet Injection/Pressure Reporting Tool, send an email to the TexNet Team at texnet-web-support@beg.utexas.edu.`\r\n }\r\n ]\r\n },\r\n {\r\n title: 'Reporting Field Glossary',\r\n titleAbbreviated: 'Glossary',\r\n faq: [\r\n {\r\n question: `Volume Injected (Bbls)`,\r\n answer: `The volume of liquid injected during the reporting day, in barrels.`\r\n },\r\n {\r\n question: `Injection Pressure Average (PSIG)`,\r\n answer: `This is the average surface injection pressure measured during the reporting day at the well head, in PSIG.`\r\n },\r\n {\r\n question: `Injection Pressure Max (PSIG)`,\r\n answer: `This is the maximum surface injection pressure measured during the reporting day at the well head, in PSIG.`\r\n },\r\n {\r\n question: `Injection Rate Max. (Bbl/min)`,\r\n answer: `The maximum instantaneous injection rate measured during the reporting day, in barrels per minute.

The December 2023 NTO states that all new and amended permits will require reporting the maximum injection rate. Similarly, existing SWDs with permitted maximum daily injection volumes greater than 5,000 bbls within the Greater Permian Basin are requested to report the same parameter. If the well is not equipped with monitors that report a near-instantaneous maximum injection rate, RRC requests that the operator estimate it by dividing the volume injected by the number of minutes the well was injecting.

For example, your estimated maximum injection rate would be 6.94 BPM if you injected 10,000 bbls and the well was injecting for that entire reporting day: 10,000 bbls per day ÷ 1440 minutes per day = 6.94 barrels per minute.`\r\n },\r\n {\r\n question: `Total Gas Volume Injected (MCF)`,\r\n answer: `The total volume of gas injected during the reporting day, in MCF.`\r\n },\r\n {\r\n question: `Max Day Inj Gas Rate (Mcf/min)`,\r\n answer: `The maximum instantaneous rate of gas injection during the reporting day, in standard cubic feet per minute on the reporting day.

The December 2023 NTO states that all new and amended permits will require reporting the maximum injection rate. Similarly, existing SWDs with permitted maximum daily injection volumes greater than 5,000 bbls within the Greater Permian Basin are requested to report the same parameter. If the well is not equipped with monitors that report a near-instantaneous maximum injection rate, RRC requests that the operator estimate it by dividing the volume injected by the number of minutes the well was injecting.

For example, your estimated maximum injection rate would be 6.94 Mcf/min if you injected 10,000 Mcf/day and the well was injecting for that entire reporting day: 10,000 Mcf/day ÷ 1440 minutes per day = 6.94 Mcf/min.`\r\n },\r\n {\r\n question: `Annulus Pressure Num. Readings`,\r\n answer: `The number of annulus pressure readings taken that contributed to the minimum and maximum.`\r\n },\r\n {\r\n question: `Annulus Pressure Min. (PSIG)`,\r\n answer: `The lowest annulus pressure reading taken during the given day.`\r\n },\r\n {\r\n question: `Annulus Pressure Max. (PSIG)`,\r\n answer: `The highest annulus pressure reading taken during the given day.`\r\n },\r\n {\r\n question: `Completed Injection Interval Top (perforated or open hole interval) (Ft.)`,\r\n answer: `The TVD below ground surface of the top of the injection interval on the given day.`\r\n },\r\n {\r\n question: `Completed Injection Interval Bottom (perforated or open hole interval) (Ft.)`,\r\n answer: `The TVD below ground surface of the bottom of the injection interval on the given day.`\r\n },\r\n {\r\n question: `Depth of Tubing Packer (Ft.)`,\r\n answer: `The TVD below ground surface of the tubing packer.`\r\n },\r\n {\r\n question: `Formations`,\r\n answer: `This is the set of formations that are being injected into on the reporting day.`\r\n },\r\n {\r\n question: `Injected Fluids from Other Sources`,\r\n answer: `This field indicates whether the fluids being injected are from sources other than the reporting operator.`\r\n },\r\n {\r\n question: `Injection Through...`,\r\n answer: `This field should contain either \"Tubing\" or \"Casing,\" indicating which set of tubulars the fluids are being injected through.`\r\n },\r\n {\r\n question: 'Shut-In Bottom Hole Pressure',\r\n answer: 'This is the static pressure, as measured at the bottom of the well. All pressure measurements in TexNet Injection/Pressure reporting tool are reported in PSIG. The Tool accepts three different methods for measuring or calculating the shut-in bottom hole pressure, which are described in the December 2023 Notice to Operators.'\r\n },\r\n {\r\n question: 'Pressure calculated to top of completed interval TVD',\r\n answer: 'This is the TVD (true vertical depth) in feet below ground surface of the sensor used to measure the bottom hole pressure, when reporting the shut-in BHP.'\r\n },\r\n {\r\n question: 'Liquid Density',\r\n answer: 'This is the density of the fluid being injected into the well in pounds per gallon. It must be between 5 lb/gal and 20 lb/gal.'\r\n },\r\n {\r\n question: 'MEAS BHP AVE INJ (PSIG)',\r\n answer: 'This is the average bottomhole injection pressure when reporting a measured bottom hole pressure on the reporting day.'\r\n },\r\n {\r\n question: 'MEAS BHP MAX INJ (PSIG)',\r\n answer: 'This is the maximum bottomhole injection pressure when reporting a measured bottom hole pressure on the reporting day.'\r\n },\r\n {\r\n question: 'CALC BHP AVE INJ (PSIG)',\r\n answer: 'This is the calculated average bottomhole injection pressure value which is obtained by using a measured surface injection pressure, estimate for the hydrostatic head of the fluid column, and an estimate of friction loss using the size of the tubulars and the injection rate. '\r\n },\r\n {\r\n question: 'CALC BHP MAX INJ (PSIG)',\r\n answer: 'This is the calculated maximum bottomhole injection pressure value which is obtained by using a measured surface injection pressure, estimate for the hydrostatic head of the fluid column, and an estimate of friction loss using the size of the tubulars and the injection rate.'\r\n },\r\n {\r\n question: 'STATIC P SHUTIN TIME (Hrs)',\r\n answer: 'This is length of time in hours that the well was shut-in prior to measuring a static shut-in pressure.'\r\n }\r\n ]\r\n }\r\n \r\n ]\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n\r\n //sort the glossary terms, so they're in alphabetical order\r\n this.contentList[1].faq.sort((a: any, b: any) => {\r\n let ret = 0;\r\n\r\n if(a.question > b.question) {\r\n ret = 1;\r\n }\r\n else if(a.question < b.question) {\r\n ret = -1;\r\n }\r\n\r\n return ret;\r\n });\r\n }\r\n\r\n scroll(title, index) {\r\n let matchedElement = document.getElementById(title + '-' + index);\r\n matchedElement.scrollIntoView({\r\n behavior: 'smooth'\r\n });\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'filter'\r\n})\r\nexport class FilterPipe implements PipeTransform {\r\n transform(items: any[], searchText: string): any[] {\r\n if (!items) return [];\r\n if (!searchText) return items;\r\n if (searchText == \"\") return items;\r\n\r\n searchText = searchText.toLowerCase();\r\n\r\n return items.filter(it => {\r\n return it.question.toLowerCase().includes(searchText);\r\n });\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl } from '@angular/forms';\r\nimport { InjectionDataModel } from '../_models/injection-data-model';\r\n\r\n@Component({\r\n selector: 'app-fluid-fraction-form',\r\n templateUrl: './fluid-fraction-form.component.html',\r\n styleUrls: ['./fluid-fraction-form.component.css']\r\n})\r\nexport class FluidFractionFormComponent implements OnInit {\r\n\r\n @Input() injectionDataModel: InjectionDataModel;\r\n\r\n form: FormGroup;\r\n\r\n FractionSaltWater: number;\r\n FractionFreshWater: number;\r\n FractionFractureWaterFlowBack: number;\r\n FractionNorm: number;\r\n FractionCo2: number;\r\n FractionNaturalGas: number;\r\n FractionH2s: number;\r\n FractionPolymer: number;\r\n FractionSteam: number;\r\n FractionAir: number;\r\n FractionNitrogen: number;\r\n FractionOther: number;\r\n OtherDesc: string;\r\n\r\n constructor(private formBuilder: FormBuilder) {\r\n\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n function totalFractionValidator() {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n var ret: any = {\r\n };\r\n\r\n var keys = Object.keys(group.controls);\r\n\r\n var sum = 0;\r\n var hasValues = false;\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n if (group.controls[keys[i]].value != null && keys[i] != \"OtherDesc\") {\r\n hasValues = true;\r\n sum += group.controls[keys[i]].value;\r\n }\r\n }\r\n\r\n if (hasValues && sum != 100) {\r\n ret.notEquals100 = true;\r\n ret.totalPercentages = sum;\r\n }\r\n\r\n if (group.controls.FractionOther.value != null &&\r\n group.controls.FractionOther.value != 0 &&\r\n (group.controls.OtherDesc.value == null ||\r\n group.controls.OtherDesc.value == \"\")) {\r\n ret.noOtherDesc = true;\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n function individualFractionValidator() {\r\n return (control: FormControl): {\r\n [key: string]: any\r\n } => {\r\n var ret: any = {\r\n };\r\n\r\n if (control.value != null && control.value > 100) {\r\n ret.greaterThan100 = true;\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n this.form = this.formBuilder.group({\r\n 'FractionSaltWater': [this.injectionDataModel.FractionSaltWater, individualFractionValidator()],\r\n 'FractionFreshWater': [this.injectionDataModel.FractionFreshWater, individualFractionValidator()],\r\n 'FractionFractureWaterFlowBack': [this.injectionDataModel.FractionFractureWaterFlowBack, individualFractionValidator()],\r\n 'FractionNorm': [this.injectionDataModel.FractionNorm, individualFractionValidator()],\r\n 'FractionCo2': [this.injectionDataModel.FractionCo2, individualFractionValidator()],\r\n 'FractionNaturalGas': [this.injectionDataModel.FractionNaturalGas, individualFractionValidator()],\r\n 'FractionH2s': [this.injectionDataModel.FractionH2s, individualFractionValidator()],\r\n 'FractionPolymer': [this.injectionDataModel.FractionPolymer, individualFractionValidator()],\r\n 'FractionSteam': [this.injectionDataModel.FractionSteam, individualFractionValidator()],\r\n 'FractionAir': [this.injectionDataModel.FractionAir, individualFractionValidator()],\r\n 'FractionNitrogen': [this.injectionDataModel.FractionNitrogen, individualFractionValidator()],\r\n 'FractionOther': [this.injectionDataModel.FractionOther, individualFractionValidator()],\r\n 'OtherDesc': [this.injectionDataModel.OtherDesc]\r\n }, {\r\n validator: totalFractionValidator()\r\n });\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-help',\n templateUrl: './help.component.html',\n styleUrls: ['./help.component.css']\n})\nexport class HelpComponent implements OnInit {\n\n constructor() { }\n\n tutorialVideos: any = [\n\r\n ];\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, ViewChild, HostListener } from '@angular/core';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { UserWellsService } from '../user-wells.service';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\r\nimport { MatSort, Sort } from '@angular/material/sort';\r\nimport { MatTableFilter } from 'mat-table-filter';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { ExportManagerService } from '../_services/export-manager.service';\r\nimport { ExcelImportService } from '../_services/excel-import.service';\r\nimport { InjectionService } from '../_services/injection.service';\r\nimport { UserAccountService } from '../_services/user-account.service'\r\nimport { BHPService } from '../_services/bhp.service';\r\nimport { ExportOption } from '../_models/export-option';\r\nimport { ExportRequest } from '../_models/export-request';\r\nimport { FormationsForWellRequestModel } from '../_models/formations-for-well-request-model';\r\nimport { FormationsForWellResponseModel } from '../_models/formations-for-well-response-model';\r\nimport { ExportDateRangeSelectorComponent } from '../export-date-range-selector/export-date-range-selector.component';\r\nimport { SelectPeriodDialogComponent } from '../select-period-dialog/select-period-dialog.component'\r\nimport { BhpDialogComponent } from '../bhp-dialog/bhp-dialog.component'\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { ImportExcelDataComponent } from '../import-excel-data/import-excel-data.component';\r\nimport { LoadingDialogComponent } from '../loading-dialog/loading-dialog.component';\r\nimport { ApiResultErrorDialogComponent } from '../api-result-error-dialog/api-result-error-dialog.component';\r\nimport { WellsListFilterModel } from '../_models/wells-list-filter-model';\r\nimport { UserPrefsModel } from '../_models/user-prefs-model'\r\nimport { UserPrefsExchangeModel } from '../_models/user-prefs-exchange-model'\r\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-home',\r\n templateUrl: './home.component.html',\r\n styleUrls: ['./home.component.css']\r\n})\r\nexport class HomeComponent {\r\n\r\n public displayedColumns: string[] = ['selection', 'details', 'Apinumber', 'Uicnumber', 'LeaseName', 'WellNumber', 'OperatorOperatorName', 'InjectionTopInterval', 'InjectionBottomInterval', 'LastInjectionDate', 'InjectionsCount', 'favorite'];\r\n public wellData: Array;\r\n\r\n selection = new SelectionModel(true, []);\r\n\r\n dataSource: MatTableDataSource;\r\n\r\n filterEntity: WellsListFilterModel;\r\n\r\n controllerName: string;\r\n\r\n\r\n filterParams: any = {};\r\n\r\n filterType: MatTableFilter;\r\n\r\n excelTemplateDataSubscription: Subscription;\r\n submitInjectionBatchSubscription: Subscription;\r\n submitBhpBatchSubscription: Subscription;\r\n\r\n loadingDialog: MatDialogRef;\r\n messageDialog = null;\r\n\r\n userPrefs: UserPrefsModel = {\r\n FavoriteWellIds: []\r\n };\r\n saveUserPrefsTimeout;\r\n\r\n @ViewChild(MatSort) matSort: MatSort;\r\n\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n public userWellsService: UserWellsService,\r\n public exportManagerService: ExportManagerService,\r\n protected excelImportService: ExcelImportService,\r\n public injectionService: InjectionService,\r\n public bhpService: BHPService,\r\n public userAcountService: UserAccountService,\r\n ) {\r\n\r\n var initData = new Array();\r\n\r\n this.excelTemplateDataSubscription = this.excelImportService.currentExcelTemplateData.subscribe((x: any) => {\r\n\r\n if (x != null) {\r\n //Turn formation names into ids\r\n\r\n //Get unique Well Ids\r\n let wellIds = x.Injections.reduce((acc, val) => {\r\n if (val.WellId && !acc.includes(val.WellId)) {\r\n acc.push(val.WellId);\r\n }\r\n return acc;\r\n }, []);\r\n let reqModel: FormationsForWellRequestModel = {\r\n wellIds\r\n }\r\n\r\n let loadingConfig: any = {};\r\n loadingConfig.data = {\r\n title: 'Submission in Progress',\r\n body: 'Loading... Large submissions may take some time, please wait.'\r\n };\r\n\r\n if (this.controllerName == 'injection') {\r\n //Get Formations Name to Id lookup table\r\n this.userWellsService.getFormationsForWellIds(reqModel).then((formations: FormationsForWellResponseModel) => {\r\n let invalidFormationList = [];\r\n //Replace Names with Ids\r\n let multiWellBatch = x.Injections.map((injection) => {\r\n let formationNames = injection.FormationIds.split(',');\r\n injection.FormationIds = formationNames.map((name) => {\r\n //Get specific array that corrilates to wellId\r\n let formationMapList = formations.formationsByWellId[injection.WellId];\r\n if (formationMapList) {\r\n //Find the matching formation name from list and return\r\n let formationName = formationMapList.reduce((acc, val) => {\r\n if (val.Name == name) {\r\n acc = val.Id;\r\n }\r\n return acc;\r\n }, null);\r\n if (!formationName) {\r\n let formationNameWithWell = name + ' (' + injection.WellId + ')';\r\n if (invalidFormationList.indexOf(formationNameWithWell) == -1) {\r\n invalidFormationList.push(formationNameWithWell);\r\n }\r\n }\r\n return formationName;\r\n }\r\n });\r\n return injection;\r\n });\r\n\r\n //If no invalid formations are found submit multiwellbatch\r\n if (invalidFormationList.length == 0) {\r\n this.injectionService.SubmitMultiWellBatch(x, this.controllerName);\r\n this.loadingDialog = this.dialog.open(LoadingDialogComponent, loadingConfig);\r\n } else {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Invalid Formations Names\",\r\n message: `The following formation(s): ${invalidFormationList.join(', ')} are not found in the Well's formation list. Please provide the correct formation(s) for each record and try again.`\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (this.controllerName == 'injectionPressure') {\r\n this.loadingDialog = this.dialog.open(LoadingDialogComponent, loadingConfig);\r\n this.bhpService.SubmitMultiWellBatch(x, this.controllerName);\r\n }\r\n }\r\n });\r\n\r\n //Subscribe to the result parameter on the injection service.\r\n this.submitInjectionBatchSubscription = this.injectionService.submitBatchResult.subscribe((x) => {\r\n\r\n //Close loading dialog\r\n if (this.loadingDialog) {\r\n this.loadingDialog.close();\r\n }\r\n\r\n if (x != null) {\r\n\r\n //If error is return with reasons load the error dialog component\r\n if (x.Reasons && x.Reasons.length > 0) {\r\n this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: x\r\n });\r\n } else {\r\n let title, message;\r\n if (x.Success == true) {\r\n title = 'Success';\r\n message = 'Your injection records have been submitted successfully.';\r\n }\r\n else {\r\n title = 'Error';\r\n message = 'Something went wrong with your submission, please review your template and try again.';\r\n }\r\n if (!this.messageDialog) {\r\n this.messageDialog = this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: title,\r\n message: message\r\n }\r\n }).afterClosed().subscribe(() => {\r\n this.messageDialog = null;\r\n });\r\n }\r\n //if call succeeded invoke getWells to update table\r\n if (x.Success == true) {\r\n this.userWellsService.GetWells();\r\n }\r\n }\r\n }\r\n });\r\n\r\n //Subscribe to the result parameter on the injection service.\r\n this.submitBhpBatchSubscription = this.bhpService.submitBatchResult.subscribe((x) => {\r\n\r\n //Close loading dialog\r\n if (this.loadingDialog) {\r\n this.loadingDialog.close();\r\n }\r\n\r\n if (x != null) {\r\n\r\n //If error is return with reasons load the error dialog component\r\n if (x.Reasons && x.Reasons.length > 0) {\r\n this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: x\r\n });\r\n } else {\r\n let title, message;\r\n if (x.Success == true) {\r\n title = 'Success';\r\n message = 'Your injection records have been submitted successfully.';\r\n }\r\n else {\r\n title = 'Error';\r\n message = 'Something went wrong with your submission, please review your template and try again.';\r\n }\r\n if (!this.messageDialog) {\r\n this.messageDialog = this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: title,\r\n message: message\r\n }\r\n }).afterClosed().subscribe(() => {\r\n this.messageDialog = null;\r\n });\r\n }\r\n\r\n //if call succeeded invoke getWells to update table\r\n if (x.Success == true) {\r\n this.userWellsService.GetWells();\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.dataSource = new MatTableDataSource(initData);\r\n\r\n this.dataSource.filterPredicate = (data: WellDetailsModel, filter: string) => {\r\n var ret: boolean = true;\r\n\r\n var filterObj: WellsListFilterModel = JSON.parse(filter);\r\n\r\n function stringFilter(keyName) {\r\n try {\r\n var needle = filterObj[keyName].toLowerCase();\r\n\r\n if (needle != undefined && needle != null && needle != \"\") {\r\n var haystack = data[keyName];\r\n var ind = haystack.toLowerCase().indexOf(needle);\r\n\r\n if (ind == -1) {\r\n ret = false;\r\n }\r\n else {\r\n let q = 0;\r\n }\r\n }\r\n }\r\n catch (ex) {\r\n\r\n }\r\n }\r\n\r\n stringFilter(\"Apinumber\");\r\n stringFilter(\"Uicnumber\");\r\n stringFilter(\"LeaseName\");\r\n stringFilter(\"WellNumber\");\r\n stringFilter(\"OperatorOperatorName\");\r\n\r\n //Filter on the exclude zero injections field.\r\n if (filterObj.ExcludeZeroInjections) {\r\n if (data.InjectionsCount == 0) {\r\n ret = false;\r\n }\r\n }\r\n\r\n //Filter based on whether or not the wuell is in the favorites list.\r\n if (filterObj.ShowFavorites) {\r\n if (!this.userPrefs.FavoriteWellIds.includes(data.Id)) {\r\n ret = false;\r\n }\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n ngOnInit() {\r\n this.userWellsService.onWellDataUpdate().subscribe(newWellData => {\r\n this.dataSource.data = newWellData;\r\n\r\n //Force the filters to apply so that the table gets filtered right.\r\n this.applyFilter();\r\n });\r\n\r\n this.userAcountService.getMyUserPrefs().then((userPrefs: any) => {\r\n this.userPrefs = userPrefs;\r\n\r\n //Force the filters to apply so that the table gets filtered right.\r\n this.applyFilter();\r\n });\r\n\r\n\r\n var sFilterEntity = localStorage.getItem('disposalHomeSearchParams');\r\n\r\n if (sFilterEntity == null) {\r\n this.filterEntity = new WellsListFilterModel();\r\n }\r\n else {\r\n var filterEntity = JSON.parse(sFilterEntity);\r\n this.filterEntity = filterEntity;\r\n }\r\n \r\n this.filterType = MatTableFilter.ANYWHERE;\r\n\r\n this.userWellsService.GetWells();\r\n\r\n }\r\n\r\n applyFilter() {\r\n\r\n this.dataSource.filter = JSON.stringify(this.filterEntity);\r\n\r\n //Save the state of the filter form\r\n this.saveFilterFormState();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.dataSource.paginator = this.paginator;\r\n this.dataSource.sort = this.matSort;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.handleNavigateAway();\r\n }\r\n\r\n @HostListener(\"window:beforeunload\", ['$event'])\r\n beforeUnloadHandler(event) {\r\n this.handleNavigateAway();\r\n }\r\n\r\n\r\n handleNavigateAway() {\r\n\r\n //Unsubscribe from the event subscriptions\r\n if (this.excelTemplateDataSubscription != null) {\r\n this.excelTemplateDataSubscription.unsubscribe();\r\n }\r\n if (this.submitInjectionBatchSubscription != null) {\r\n this.submitInjectionBatchSubscription.unsubscribe();\r\n }\r\n if (this.submitBhpBatchSubscription != null) {\r\n this.submitBhpBatchSubscription.unsubscribe();\r\n }\r\n \r\n //When leaving home component save the user preferences\r\n this.userAcountService.saveMyUserPrefs(this.userPrefs);\r\n }\r\n\r\n handleAddWellClick() {\r\n alert(\"adding well\");\r\n }\r\n\r\n filterFieldHandleClick(event: Event) {\r\n event.stopPropagation();\r\n }\r\n\r\n saveFilterFormState() {\r\n localStorage.setItem('disposalHomeSearchParams', JSON.stringify(this.filterEntity));\r\n }\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.dataSource.data.length;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n return;\r\n }\r\n\r\n this.selection.select(...this.dataSource.filteredData);\r\n }\r\n\r\n /** The label for the checkbox on the passed row */\r\n checkboxLabel(row?: WellDetailsModel): string {\r\n if (!row) {\r\n return `${this.isAllSelected() ? 'deselect' : 'select'} all`;\r\n }\r\n return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.PermitNumber}`;\r\n }\r\n\r\n export(option: ExportOption) {\r\n var today = new Date();\r\n var aYearAgo = new Date(today);\r\n aYearAgo.setFullYear(aYearAgo.getFullYear() - 1);\r\n\r\n var wellIds = new Array();\r\n\r\n this.selection.selected.forEach((wdm) => {\r\n wellIds.push(wdm.Id);\r\n });\r\n\r\n //Theoretically, we'd need to \r\n var req = new ExportRequest();\r\n req.BeginYear = null;\r\n req.BeginMonth = null;\r\n req.EndYear = null;\r\n req.EndMonth = null;\r\n req.WellIds = wellIds;\r\n req.Format = option.Key;\r\n\r\n this.dialog.open(ExportDateRangeSelectorComponent, {\r\n }).afterClosed().subscribe((result: any) => {\r\n\r\n req.BeginYear = result.BeginDate.getFullYear();\r\n req.BeginMonth = result.BeginDate.getMonth() + 1;\r\n req.EndYear = result.EndDate.getFullYear();\r\n req.EndMonth = result.EndDate.getMonth() + 1;\r\n\r\n this.exportManagerService.export(req, true).then((result) => {\r\n var q = 0;\r\n },\r\n (err) => {\r\n var q = 0;\r\n });\r\n });\r\n\r\n\r\n }\r\n\r\n clearFilters() {\r\n this.filterEntity.Apinumber = \"\";\r\n this.filterEntity.Uicnumber = \"\";\r\n this.filterEntity.LeaseName = \"\";\r\n this.filterEntity.WellNumber = \"\";\r\n this.filterEntity.OperatorOperatorName = \"\";\r\n this.filterEntity.ExcludeZeroInjections = false;\r\n }\r\n\r\n hasFilters() {\r\n let ret: boolean = false;\r\n\r\n if(\r\n (this.filterEntity.Apinumber != null && this.filterEntity.Apinumber != \"\") ||\r\n (this.filterEntity.Uicnumber != null && this.filterEntity.Uicnumber != \"\") ||\r\n (this.filterEntity.LeaseName != null && this.filterEntity.LeaseName != \"\") ||\r\n (this.filterEntity.WellNumber != null && this.filterEntity.WellNumber != \"\") ||\r\n (this.filterEntity.OperatorOperatorName != null && this.filterEntity.OperatorOperatorName != \"\") ||\r\n (this.filterEntity.ExcludeZeroInjections != null && this.filterEntity.ExcludeZeroInjections != false)\r\n ) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n getMultiWellTemplate(templateType: string) {\r\n let selectedWells = this.selection.selected;\r\n\r\n let selectedWellsValidation = true;\r\n let invalidWellList = [];\r\n selectedWells.forEach(well => {\r\n //If formations array is empty or null fail validation check\r\n if (well.Formations == null || well.Formations.length == 0) {\r\n selectedWellsValidation = false;\r\n invalidWellList.push(well.Uicnumber);\r\n }\r\n });\r\n\r\n //If all wells pass validation open SelectPeriodDialogComponent\r\n if (selectedWellsValidation) {\r\n\r\n let dialogComponent;\r\n\r\n switch (templateType) {\r\n case 'injection_volume':\r\n dialogComponent = SelectPeriodDialogComponent\r\n break;\r\n case 'BottomHolePressure':\r\n dialogComponent = BhpDialogComponent\r\n break;\r\n }\r\n\r\n this.dialog.open(dialogComponent, {\r\n }).afterClosed().subscribe( async (result: any) => {\r\n\r\n //Did dialog return content?\r\n if (result) {\r\n\r\n\r\n let dataColumnsList;\r\n\r\n switch (templateType) {\r\n case 'injection_volume':\r\n dataColumnsList = await this.injectionService.getCombinedDataColumnsList();\r\n break;\r\n case 'BottomHolePressure':\r\n dataColumnsList = await this.bhpService.getCombinedDataColumnsList(result.method);\r\n break;\r\n }\r\n\r\n\r\n\r\n //Populate with last injection data?\r\n if (result.useLastInjData) {\r\n\r\n let injectionDataPromiseList = [];\r\n\r\n if (templateType == 'injection_volume') {\r\n injectionDataPromiseList = selectedWells.map((well) => {\r\n return this.injectionService.GetLastInjectionRecordWithWellId(well.Id);\r\n });\r\n }\r\n\r\n if (templateType == 'BottomHolePressure') {\r\n injectionDataPromiseList = selectedWells.map((well) => {\r\n return this.bhpService.GetLastInjectionRecordWithWellId(well.Id);\r\n });\r\n }\r\n\r\n\r\n Promise.all(injectionDataPromiseList).then((injectionDataList: any) => {\r\n\r\n //If promise returns null replace with empty object\r\n injectionDataList = injectionDataList.map((injRecord) => {\r\n if (!injRecord) {\r\n return {};\r\n }\r\n return injRecord;\r\n })\r\n\r\n if (templateType == 'injection_volume') {\r\n injectionDataList = injectionDataList.map((injRecord, index) => {\r\n if (!injRecord.FormationIds) {\r\n return injRecord;\r\n }\r\n injRecord.FormationIds = injRecord.FormationIds.map((formationId) => {\r\n //Find correlated formation name from selectedWells\r\n return selectedWells[index].Formations.reduce((acc, val) => {\r\n if (val.Id == formationId) {\r\n acc = val.Name;\r\n }\r\n return acc;\r\n }, '');\r\n }).join(',');\r\n return injRecord;\r\n });\r\n }\r\n this.excelImportService.generateTemplateMultiWell(selectedWells, result.beginDate, result.endDate, 'daily', templateType, dataColumnsList, injectionDataList);\r\n });\r\n\r\n } else {\r\n this.excelImportService.generateTemplateMultiWell(selectedWells, result.beginDate, result.endDate, 'daily', templateType, dataColumnsList, []);\r\n }\r\n }\r\n });\r\n\r\n }\r\n else {\r\n\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Missing Well Formations\",\r\n message: `The following well(s) by UIC Number: ${invalidWellList.join(', ')} do not have a Formation selected. This a requirement before you can submit data. Please provide the correct Formation for each well and try again.` \r\n }\r\n });\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n async uploadMutliWellTemplate(controllerName: string) {\r\n this.controllerName = controllerName;\r\n let dataColumnsList;\r\n\r\n switch (controllerName) {\r\n case 'injection':\r\n dataColumnsList = await this.injectionService.getCombinedDataColumnsList();\r\n break;\r\n case 'injectionPressure':\r\n dataColumnsList = await this.bhpService.getCombinedDataColumnsList();\r\n break;\r\n }\r\n\r\n let importConfig: any = {};\r\n importConfig.data = {\r\n controllerName,\r\n dataColumnsList\r\n };\r\n this.dialog.open(ImportExcelDataComponent, importConfig);\r\n }\r\n\r\n toggleFav(wellId, enable) {\r\n let _this = this;\r\n function generateTimeout() {\r\n return setTimeout(function () {\r\n _this.saveUserPrefsTimeout = null;\r\n _this.userAcountService.saveMyUserPrefs(_this.userPrefs);\r\n }, 10000);\r\n }\r\n\r\n if (enable) {\r\n this.userPrefs.FavoriteWellIds.push(wellId);\r\n } else {\r\n let wellIdIndex = this.userPrefs.FavoriteWellIds.indexOf(wellId);\r\n this.userPrefs.FavoriteWellIds.splice(wellIdIndex, 1);\r\n }\r\n\r\n //If the timer is currently active reset it.\r\n if (this.saveUserPrefsTimeout) {\r\n clearTimeout(this.saveUserPrefsTimeout);\r\n }\r\n\r\n //Initialize timer\r\n this.saveUserPrefsTimeout = generateTimeout()\r\n }\r\n\r\n updateTableSort(sort: Sort) {\r\n\r\n function compare(a: number | string, b: number | string, isAsc: boolean) {\r\n return (a < b ? -1 : 1) * (isAsc ? 1 : -1);\r\n }\r\n\r\n function booleanCompare(a: boolean, b: boolean) {\r\n return Number(a) - Number(b);\r\n }\r\n\r\n //Make sure we have parameters to actually sort by...\r\n if (!sort.active || sort.direction === '') {\r\n return;\r\n }\r\n\r\n let sortedData = this.dataSource.data.sort((a, b) => {\r\n let ret = 0;\r\n\r\n let isAsc = sort.direction === \"asc\";\r\n\r\n //The favorite field is a special case.\r\n if(sort.active == \"favorite\") {\r\n let isFavoriteA = this.userPrefs.FavoriteWellIds.includes(a.Id);\r\n let isFavoriteB = this.userPrefs.FavoriteWellIds.includes(b.Id);\r\n\r\n let intm = booleanCompare(isFavoriteA, isFavoriteB);\r\n\r\n if(!isAsc && intm != 0) {\r\n intm = intm * -1;\r\n }\r\n\r\n ret = intm;\r\n }\r\n else {\r\n ret = compare(a[sort.active], b[sort.active], isAsc)\r\n }\r\n\r\n return ret;\r\n\r\n });\r\n\r\n this.dataSource.data = sortedData;\r\n\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, ElementRef, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ExcelImportService } from '../_services/excel-import.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-import-excel-data',\r\n templateUrl: './import-excel-data.component.html',\r\n styleUrls: ['./import-excel-data.component.css']\r\n})\r\nexport class ImportExcelDataComponent implements OnInit {\r\n\r\n \r\n\r\n @ViewChild(\"fileSelector\") fileSelector: ElementRef;\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any, public dialogRef: MatDialogRef, public excelImportService: ExcelImportService) {\r\n\r\n }\r\n\r\n cancelClicked() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n submitClicked() {\r\n if (this.fileSelector != null) {\r\n var filePath = this.fileSelector.nativeElement.files[0];\r\n this.excelImportService.ImportExcelTemplateData(filePath, this.data);\r\n }\r\n\r\n this.dialogRef.close(true);\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-injection-composition-data-grid',\n templateUrl: './injection-composition-data-grid.component.html',\n styleUrls: ['./injection-composition-data-grid.component.css']\n})\nexport class InjectionCompositionDataGridComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nimport { InjectionService } from '../_services/injection.service';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { InjectionDataBatch } from '../_models/injection-data-batch';\r\n\r\nimport { UserSubmittableDataGridComponent } from '../user-submittable-data-grid/user-submittable-data-grid.component';\r\n\r\n@Component({\r\n selector: 'app-injection-data-grid2',\r\n templateUrl: './injection-data-grid2.component.html',\r\n styleUrls: ['./injection-data-grid2.component.css']\r\n})\r\nexport class InjectionDataGrid2Component extends UserSubmittableDataGridComponent implements OnInit {\r\n\r\n\r\n constructor(\r\n public injectionService: InjectionService,\r\n formBuilder: FormBuilder\r\n ) {\r\n\r\n super(formBuilder, injectionService);\r\n\r\n //Subscribe to the current injection batch\r\n this.injectionService.currentInjectionBatch.subscribe((newInjectionDataBatch: InjectionDataBatch) => {\r\n\r\n this.clearForm();\r\n\r\n if(newInjectionDataBatch != null) {\r\n //When we have a\r\n this.buildForm(newInjectionDataBatch);\r\n }\r\n \r\n });\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input, ViewChild } from '@angular/core';\r\nimport { InjectionDataModel } from '../_models/injection-data-model';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-injection-data-list',\r\n templateUrl: './injection-data-list.component.html',\r\n styleUrls: ['./injection-data-list.component.css']\r\n})\r\nexport class InjectionDataListComponent implements OnInit {\r\n\r\n public displayedColumns: string[] = ['InjectionDate', 'InjectionPressureAveragePsig', 'InjectionPressureMaxPsig', 'VolumeInjectedBbl', 'TotalVolumeInjectedMcf', 'AnnulusPressureNumReadings', 'AnnulusPressureMinPsig', 'AnnulusPressureMaxPsig', 'DateRowAdded'];\r\n\r\n dataSource: MatTableDataSource = new MatTableDataSource(null);\r\n\r\n\r\n @Input() dateMode: string = \"monthly\";\r\n @Input() injectionDataModel: InjectionDataModel;\r\n @ViewChild(MatTable) matTable: MatTable;\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.refresh();\r\n }\r\n\r\n refresh() {\r\n if (this.injectionDataModel != null && this.injectionDataModel.InjectionRows != null) {\r\n this.dataSource.data = ( this.injectionDataModel.InjectionRows);\r\n }\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-injection-density-data-grid',\n templateUrl: './injection-density-data-grid.component.html',\n styleUrls: ['./injection-density-data-grid.component.css']\n})\nexport class InjectionDensityDataGridComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { InjectionDataModel } from '../_models/injection-data-model';\r\nimport { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { Formation } from '../_models/formation';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\n\r\n\r\n@Component({\r\n selector: 'app-injection-formations-editor',\r\n templateUrl: './injection-formations-editor.component.html',\r\n styleUrls: ['./injection-formations-editor.component.css']\r\n})\r\nexport class InjectionFormationsEditorComponent implements OnInit, AfterViewInit {\r\n\r\n private _well: WellDetailsModel;\r\n private _lastInjection: InjectionDataRecord;\r\n\r\n @Input() injectionDataModel: InjectionDataModel;\r\n @Input() set well(value: WellDetailsModel) {\r\n this._well = value;\r\n\r\n this.refreshFormationOptions();\r\n }\r\n\r\n get well(): WellDetailsModel {\r\n return this._well;\r\n }\r\n\r\n @Input() set lastInjection(value: InjectionDataRecord) {\r\n this._lastInjection = value;\r\n this.refreshFormationOptions();\r\n }\r\n\r\n get lastInjection(): InjectionDataRecord {\r\n return this._lastInjection;\r\n }\r\n\r\n public form: FormGroup;\r\n\r\n public allowedFormations: any;\r\n\r\n public initialFormationIds: Array = new Array();\r\n public initialFormationNames: Array = new Array();\r\n\r\n constructor(\r\n private formBuilder: FormBuilder\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n function formationIdsValidator() {\r\n return (control: AbstractControl) => {\r\n var ret = null;\r\n\r\n var value = control.value;\r\n\r\n if (value.length == null || value.length == 0) {\r\n var ret: any = {};\r\n\r\n ret.noFormations = true;\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n if (this.well != null) {\r\n var q = 0;\r\n }\r\n\r\n this.form = this.formBuilder.group({\r\n 'FormationIds': [this.initialFormationIds, formationIdsValidator()],\r\n 'FormationNames': [this.initialFormationNames]\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n }\r\n\r\n refreshFormationOptions() {\r\n if (this.well != null) {\r\n\r\n this.allowedFormations = new Array();\r\n\r\n //Make sure that we have the well and formation records\r\n if (this.well != null && this.well.Formations != null) {\r\n this.well.Formations.forEach((f: any) => {\r\n var formationOption = {\r\n Id: null,\r\n Name: null,\r\n Selected: false\r\n };\r\n\r\n formationOption.Id = f.Id;\r\n formationOption.Name = f.Name;\r\n\r\n if (this.lastInjection != null && this.lastInjection.FormationIds.indexOf(f.Id) > -1) {\r\n formationOption.Selected = true;\r\n }\r\n\r\n this.allowedFormations.push(formationOption);\r\n });\r\n }\r\n }\r\n\r\n this.updateFormationIdForm();\r\n }\r\n\r\n handleFormationSelectedChanged(formationOption) {\r\n formationOption.Selected = !formationOption.Selected;\r\n\r\n this.updateFormationIdForm();\r\n }\r\n\r\n updateFormationIdForm() {\r\n var newFormationIds = new Array();\r\n var newFormationNames = new Array();\r\n\r\n if (this.allowedFormations != null) {\r\n this.allowedFormations.forEach((formation) => {\r\n if (formation.Selected) {\r\n newFormationIds.push(formation.Id);\r\n newFormationNames.push(formation.Name);\r\n }\r\n });\r\n\r\n\r\n if (this.form != null) {\r\n this.form.controls.FormationIds.setValue(newFormationIds);\r\n this.form.controls.FormationNames.setValue(newFormationNames);\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, ElementRef, OnInit, ViewChild, AfterViewInit, Input } from '@angular/core';\r\nimport * as d3 from \"d3\";\r\n\r\n@Component({\r\n selector: 'app-injection-graph',\r\n templateUrl: './injection-graph.component.html',\r\n styleUrls: ['./injection-graph.component.css']\r\n})\r\nexport class InjectionGraphComponent implements OnInit {\r\n\r\n @ViewChild(\"graphFigure\") graphFigure: ElementRef;\r\n\r\n public svg: any;\r\n\r\n private width: number = 600;\r\n private height: number = 400;\r\n private marginLeft: number = 50;\r\n private marginRight: number = 50;\r\n private marginTop: number = 10;\r\n private marginBottom: number = 30;\r\n \r\n \r\n\r\n private _injData: Array;\r\n\r\n @Input()\r\n set injData(value: Array) {\r\n\r\n this._injData = value;\r\n\r\n this.initGraph();\r\n }\r\n\r\n get injData(): Array {\r\n return this._injData;\r\n }\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n \r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initGraph();\r\n }\r\n\r\n //Adds a legend to the D3 object given by \"svg,\" which is obviously supposed to be SVG.\r\n protected addGraphLegend(svg: any, classes: Array) {\r\n\r\n var legendMargin = 10;\r\n\r\n var legendG = svg.append(\"g\");\r\n\r\n var legendLineStepHeight = 30;\r\n\r\n var legendBodyHeight = legendLineStepHeight * classes.length;\r\n var legendBodyWidth = 240;\r\n\r\n var legendHeight = (legendMargin * 2) + legendBodyHeight;\r\n var legendWidth = (legendMargin * 2) + legendBodyWidth;\r\n\r\n legendG.attr(\"transform\", \"translate(\" + (this.marginLeft + this.width - legendWidth) + \", \" + this.marginTop + \")\");\r\n\r\n //Legend neatline\r\n legendG.append(\"rect\")\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"width\", legendWidth)\r\n .attr(\"height\", legendHeight)\r\n .style(\"fill\", \"black\")\r\n .style(\"fill-opacity\", \"0.1\")\r\n .style(\"stroke\", \"black\");\r\n\r\n for (var i = 0; i < classes.length; i++) {\r\n\r\n legendG.append(\"circle\")\r\n .attr(\"cx\", 10)\r\n .attr(\"cy\", (i * legendLineStepHeight) + 0.5 * legendLineStepHeight + legendMargin)\r\n .attr(\"r\", 6)\r\n .style(\"fill\", classes[i].color);\r\n\r\n legendG.append(\"text\")\r\n .attr(\"x\", 30)\r\n .attr(\"y\", (i * legendLineStepHeight) + 0.5 * legendLineStepHeight + legendMargin)\r\n .text(classes[i].label)\r\n .style(\"font-size\", \"12px\")\r\n .attr(\"alignment-baseline\", \"middle\");\r\n }\r\n\r\n }\r\n\r\n protected initGraph() {\r\n\r\n if (this.injData != null && this.injData.length > 0 && this.graphFigure != null) {\r\n\r\n var _this = this;\r\n\r\n var classes = [];\r\n\r\n this.svg = d3.select(this.graphFigure.nativeElement)\r\n .append(\"svg\")\r\n .attr(\"width\", this.width + this.marginLeft + this.marginRight)\r\n .attr(\"height\", this.height + this.marginTop + this.marginBottom)\r\n .append(\"g\")\r\n .attr(\"transform\", \"translate(\" + this.marginLeft + \",\" + this.marginTop + \")\");\r\n\r\n this.svg.append(\"rect\")\r\n .attr(\"width\", this.width)\r\n .attr(\"height\", this.height)\r\n .attr(\"transform\", \"translate(\" + this.marginLeft + \",\" + this.marginTop + \")\")\r\n .style(\"fill\", \"rgb(255,255,255)\");\r\n\r\n\r\n var timeExtent = d3.extent(this.injData, function (d) {\r\n return d.attributes.InjectionDate;\r\n })\r\n\r\n //Create the X axis\r\n var x = d3.scaleTime()\r\n .domain(timeExtent)\r\n .range([0, this.width]);\r\n\r\n //Actually add the axis to our graph\r\n this.svg.append(\"g\")\r\n .attr(\"transform\", \"translate(0, \" + this.height + \")\")\r\n .call(d3.axisBottom(x));\r\n\r\n var yAxisLeftDomain = d3.extent(this.injData, function (d) {\r\n return d.attributes.VolumeInjectedBBL;\r\n });\r\n\r\n var yAxisLeftRange = yAxisLeftDomain[1] - yAxisLeftDomain[0];\r\n\r\n var yAxisRightDomain = d3.extent(this.injData, function (d) {\r\n return d.attributes.TotalGasVolumeMCF;\r\n });\r\n\r\n var yAxisRightRange = yAxisRightDomain[1] - yAxisRightDomain[0];\r\n\r\n //Check if we have a non-zero data range before we display the left hand axis\r\n if (yAxisLeftRange > 0) {\r\n\r\n yAxisLeftDomain[1] += yAxisLeftRange * 0.2;\r\n\r\n var c = \"green\";\r\n\r\n //Create the Y axis\r\n var yLeft = d3.scaleLinear()\r\n .domain(yAxisLeftDomain)\r\n .range([this.height, 0]);\r\n\r\n //Actually draw the axis\r\n this.svg.append(\"g\")\r\n .call(d3.axisLeft(yLeft));\r\n\r\n //Actually draw the injection volume line\r\n this.svg.append(\"path\")\r\n .datum(this.injData)\r\n .attr(\"fill\", \"none\")\r\n .attr(\"stroke\", c)\r\n .attr(\"stroke-width\", 1.5)\r\n .attr(\"d\", d3.line()\r\n .x(function (d: any) { return x(d.attributes.InjectionDate); })\r\n .y(function (d: any) { return yLeft(d.attributes.VolumeInjectedBBL); })\r\n );\r\n\r\n var dClass = {\r\n color: c,\r\n label: \"Volume Injected (BBLs)\"\r\n };\r\n\r\n classes.push(dClass);\r\n }\r\n\r\n //Check if we have a non-zero data range before we display the right hand axis\r\n if (yAxisRightRange > 0) {\r\n\r\n yAxisRightDomain[1] += yAxisRightRange * 0.2;\r\n\r\n var c = \"red\";\r\n\r\n //Draw the right-hand y axis\r\n var yRight = d3.scaleLinear()\r\n .domain(yAxisRightDomain)\r\n .range([this.height, 0]);\r\n\r\n this.svg.append(\"g\")\r\n .call(d3.axisRight(yRight));\r\n\r\n this.svg.append(\"path\")\r\n .datum(this.injData)\r\n .attr(\"fill\", \"none\")\r\n .attr(\"stroke\", \"red\")\r\n .attr(\"stroke-width\", 1.5)\r\n .attr(\"d\", d3.line()\r\n .x(function (d: any) { return x(d.attributes.InjectionDate); })\r\n .y(function (d: any) { return yRight(d.attributes.TotalGasVolumeMCF); })\r\n );\r\n\r\n var dClass = {\r\n color: c,\r\n label: \"Total Gas Volume (MCF)\"\r\n };\r\n\r\n classes.push(dClass);\r\n }\r\n\r\n var mouse_g = this.svg.append(\"g\").classed(\"mouse\", true).style(\"display\", \"none\");\r\n mouse_g.append('rect').attr(\"width\", 2).attr(\"x\", -1).attr(\"height\", this.height).attr(\"fill\", \"lightgray\");\r\n mouse_g.append(\"circle\").attr(\"r\", 3).attr(\"stroke\", \"steelblue\");\r\n mouse_g.append(\"text\").attr(\"transform\", \"translate(0, 15)\")\r\n\r\n this.svg.on(\"mouseover\", function (mouse) {\r\n mouse_g.style(\"display\", \"block\");\r\n });\r\n\r\n this.svg.on(\"mouseout\", function (mouse) {\r\n mouse_g.style(\"display\", \"none\");\r\n });\r\n\r\n var firstDate = timeExtent[0];\r\n var lastDate = timeExtent[1];\r\n\r\n var timeSpan = lastDate - firstDate;\r\n\r\n this.svg.on(\"mousemove\", function (mouse) {\r\n var mouseCoords = d3.pointer(mouse);\r\n\r\n var ratio = mouseCoords[0] / _this.width;\r\n\r\n var pointerDate = (ratio * timeSpan) + firstDate;\r\n\r\n var dpDate = new Date(pointerDate);\r\n\r\n mouse_g.attr(\"transform\", `translate(${x(pointerDate)}, ${0})`);\r\n\r\n var dateString = dpDate.toLocaleDateString();\r\n\r\n mouse_g.select(\"text\").text(dateString)\r\n .attr('text-anchor', ratio < 0.5 ? \"start\" : \"end\");\r\n\r\n var closest = null;\r\n var closestDiff = null;\r\n\r\n for (var i = 0; i < _this.injData.length; i++) {\r\n var rec = _this.injData[i];\r\n\r\n var diff = Math.abs(pointerDate - rec.attributes.InjectionDate);\r\n\r\n if (closestDiff == null || diff < closestDiff) {\r\n closestDiff = diff;\r\n closest = rec;\r\n }\r\n }\r\n\r\n if (closest != null) {\r\n mouse_g.select(\"circle\").attr(\"cy\", yLeft(closest.attributes.VolumeInjectedBBL))\r\n mouse_g.select(\"text\").text(dateString + \": \" + closest.attributes.VolumeInjectedBBL.toString() + \" bbl\")\r\n .attr('text-anchor', ratio < 0.5 ? \"start\" : \"end\");\r\n }\r\n \r\n\r\n });\r\n\r\n this.addGraphLegend(this.svg, classes);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-injection-interval-data-grid',\n templateUrl: './injection-interval-data-grid.component.html',\n styleUrls: ['./injection-interval-data-grid.component.css']\n})\nexport class InjectionIntervalDataGridComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-injection-pressure-data-grid',\n templateUrl: './injection-pressure-data-grid.component.html',\n styleUrls: ['./injection-pressure-data-grid.component.css']\n})\nexport class InjectionPressureDataGridComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit, AfterViewInit } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\n\nimport { InjectionPressureDataRecord } from '../_models/injection-pressure-data-record';\nimport { BHPService } from '../_services/bhp.service';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { WellDetailsModel } from '../_models/well-details-model';\nimport { NgDynamicBreadcrumbService } from 'ng-dynamic-breadcrumb';\nimport { UserWellsService } from '../user-wells.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ApiResultErrorDialogComponent } from '../api-result-error-dialog/api-result-error-dialog.component';\n\n@Component({\n selector: 'app-injection-pressure-record-editor',\n templateUrl: './injection-pressure-record-editor.component.html',\n styleUrls: ['./injection-pressure-record-editor.component.css']\n})\nexport class InjectionPressureRecordEditorComponent implements OnInit {\n\n injectionPressureId: number;\n\n injectionPressureDetailsSubscription: Subscription;\n wellDetailsSubscription: Subscription;\n\n injectionPressureDetails: InjectionPressureDataRecord = new InjectionPressureDataRecord();\n\n wellDetails: WellDetailsModel = null;\n\n mainFormGroup: FormGroup;\n injectionId: number;\n wellId: number;\n\n constructor(\n private actRoute: ActivatedRoute,\n private formBuilder: FormBuilder,\n private bhpService: BHPService,\n public userWellsService: UserWellsService,\n protected router: Router,\n protected breadcrumbService: NgDynamicBreadcrumbService,\n protected dialog: MatDialog\n ) {\n this.injectionPressureId = this.actRoute.snapshot.params.injectionPressureId;\r\n this.wellId = this.actRoute.snapshot.params.wellId;\n\n this.refreshForm();\n }\n\n ngOnInit(): void {\r\n \n }\n\n ngAfterViewInit(): void {\n this.bhpService.GetRecord(this.injectionPressureId).then((result: InjectionPressureDataRecord) => {\r\n if(result != null) {\r\n this.injectionPressureDetails = result;\r\n\r\n this.userWellsService.LoadDetailsWell(this.injectionPressureDetails.WellId);\r\n\r\n var injDate = this.injectionPressureDetails.MeasurementDate;\r\n\r\n function formatDate(date) {\r\n var d = new Date(date),\r\n month = '' + (d.getMonth() + 1),\r\n day = '' + d.getDate(),\r\n year = d.getFullYear();\r\n\r\n if (month.length < 2) \r\n month = '0' + month;\r\n if (day.length < 2) \r\n day = '0' + day;\r\n\r\n return [year, month, day].join('-');\r\n }\r\n\r\n var breadcrumbdata = {\r\n MeasurementDate: formatDate(injDate)\r\n };\r\n\r\n this.breadcrumbService.updateBreadcrumbLabels(breadcrumbdata);\r\n\r\n this.mainFormGroup.patchValue(this.injectionPressureDetails);\r\n }\r\n },\r\n (err) => {\r\n //Handle an error where the injection details record didn't load for some reason.\r\n });\r\n\r\n //Subscribe to the well details service\r\n this.wellDetailsSubscription = this.userWellsService.detailsWell.subscribe((result: WellDetailsModel) => {\r\n this.wellDetails = result;\r\n\r\n var breadcrumbdata = {\r\n Uicnumber: this.wellDetails.Uicnumber.toString()\r\n };\r\n\r\n this.breadcrumbService.updateBreadcrumbLabels(breadcrumbdata);\r\n });\r\n }\n\n save() {\r\n\r\n var injPressureModel = this.mainFormGroup.value;\r\n\r\n this.bhpService.UpdateRecord(injPressureModel).then((result) => {\r\n\r\n if (result.Success) {\r\n\r\n var destinationUrl = \"well/\" + this.wellId;\r\n\r\n this.router.navigateByUrl(destinationUrl);\r\n }\r\n else {\r\n var dialogRef = this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: result\r\n });\r\n }\r\n },\r\n (result) => {\r\n var dialogRef = this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: result\r\n });\r\n });\r\n }\n\n refreshForm() {\n\n function otherDataValidator() {\n return (group: FormGroup): { [key: string]: any } => {\r\n let ret: any = {};\r\n\r\n let shutinPressures = [];\r\n\r\n if(group.controls.ShutinBHPDaily.value != '' && group.controls.ShutinBHPDaily.value) {\r\n shutinPressures.push(group.controls.ShutinBHPDaily.value);\r\n }\r\n\r\n if(group.controls.ShutinBHPQuarterlyCalc.value != '' && group.controls.ShutinBHPQuarterlyCalc.value) {\r\n shutinPressures.push(group.controls.ShutinBHPQuarterlyCalc.value);\r\n }\r\n\r\n if(group.controls.ShutinBHPQuarterlyMeas.value != '' && group.controls.ShutinBHPQuarterlyMeas.value) {\r\n shutinPressures.push(group.controls.ShutinBHPQuarterlyMeas.value);\r\n }\r\n\r\n if(shutinPressures.length > 1) {\r\n ret.tooManyShutinPressures = true;\r\n }\r\n\r\n if(shutinPressures.length == 0) {\r\n ret.noShutinPressure = true;\r\n }\r\n\r\n return ret;\r\n }\r\n }\n\n this.mainFormGroup = this.formBuilder.group({\n 'Id': [this.injectionPressureDetails.Id, []],\n 'WellId': [this.injectionPressureDetails.WellId, []],\n 'MeasurementDate': [this.injectionPressureDetails.MeasurementDate, []],\n 'ShutinBHPDaily': [this.injectionPressureDetails.ShutinBHPDaily, [Validators.min(0), Validators.max(99999.9)]],\n 'ShutinBHPQuarterlyCalc': [this.injectionPressureDetails.ShutinBHPQuarterlyCalc, [Validators.min(0), Validators.max(99999.9)]],\n 'ShutinBHPQuarterlyMeas': [this.injectionPressureDetails.ShutinBHPQuarterlyMeas, [Validators.min(0), Validators.max(99999.9)]],\n 'TvdDepBHPSensor': [this.injectionPressureDetails.TvdDepBHPSensor, [Validators.min(0), Validators.max(30000)]],\n 'MeaDayInjLiqDens': [this.injectionPressureDetails.MeaDayInjLiqDens, [Validators.min(5), Validators.max(20)]],\n 'StaticDayMeasSurfPress': [this.injectionPressureDetails.StaticDayMeasSurfPress, [Validators.min(0), Validators.max(99999.9)]],\n 'ShutinTimeForStaticPress': [this.injectionPressureDetails.ShutinTimeForStaticPress, [Validators.min(0), Validators.max(100000)]],\n 'AveDayMeasBHP': [this.injectionPressureDetails.AveDayMeasBHP, [Validators.min(0), Validators.max(99999.9)]],\n 'MaxDayMeasBHP': [this.injectionPressureDetails.MaxDayMeasBHP, [Validators.min(0), Validators.max(99999.9)]],\n 'AveDayEstBHP': [this.injectionPressureDetails.AveDayEstBHP, [Validators.min(0), Validators.max(99999.9)]],\n 'MaxDayEstBHP': [this.injectionPressureDetails.MaxDayEstBHP, [Validators.min(0), Validators.max(99999.9)]]\n },\n {\n validator: otherDataValidator()\r\n });\n\n }\n\n public findInvalidControls() {\r\n const invalid = [];\r\n const controls = this.mainFormGroup.controls;\r\n for (const name in controls) {\r\n if (controls[name].invalid) {\r\n invalid.push(name);\r\n }\r\n }\r\n return invalid;\r\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { InjectionDataBatch } from '../_models/injection-data-batch';\r\n\r\nimport { UserWellsService } from '../user-wells.service';\r\n\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\n\r\n@Component({\r\n selector: 'app-injection-presubmit-data-table',\r\n templateUrl: './injection-presubmit-data-table.component.html',\r\n styleUrls: ['./injection-presubmit-data-table.component.css']\r\n})\r\nexport class InjectionPresubmitDataTableComponent implements OnInit {\r\n\r\n public displayedColumns = [\r\n \"InjectionDate\",\r\n \"VolumeInjectedBbl\",\r\n \"InjectionPressureAveragePsig\",\r\n \"InjectionPressureMaxPsig\",\r\n \"MaxDayInjLiqRate\",\r\n \"TotalGasVolumeMcf\",\r\n \"MaxDayInjGasRate\",\r\n \"AnnulusPressureNumReadings\",\r\n \"AnnulusPressureMinPsig\",\r\n \"AnnulusPressureMaxPsig\",\r\n \"CurrentInjectionIntervalTop\",\r\n \"CurrentInjectionIntervalBottom\",\r\n \"DepthTubingPacker\",\r\n \"FormationIds\",\r\n \"InjectedFluidsOtherSources\",\r\n \"InjectionThrough\",\r\n \"FractionSaltWater\",\r\n \"FractionFreshWater\",\r\n \"FractionFractureWaterFlowback\",\r\n \"FractionNorm\",\r\n \"FractionCo2\",\r\n \"FractionNaturalGas\",\r\n \"FractionH2s\",\r\n \"FractionPolymer\",\r\n \"FractionSteam\",\r\n \"FractionAir\",\r\n \"FractionNitrogen\",\r\n \"FractionOther\",\r\n \"OtherDesc\"];\r\n\r\n @Input()\r\n public injectionBatch: InjectionDataBatch = null;\r\n\r\n public formationNamesById: any = {};\r\n\r\n constructor(\r\n public userWellService: UserWellsService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.userWellService.detailsWell.subscribe((x) => {\r\n if(x != null) {\r\n this.initFormations(x);\r\n }\r\n });\r\n }\r\n\r\n initFormations(wellRecord: WellDetailsModel) {\r\n\r\n if(wellRecord != null){\r\n let formationNamesById = {};\r\n\r\n for(let i=0; i < wellRecord.Formations.length; i++) {\r\n let formation = wellRecord.Formations[i];\r\n\r\n formationNamesById[formation.Id] = formation.Name;\r\n }\r\n\r\n this.formationNamesById = formationNamesById\r\n }\r\n }\r\n\r\n\r\n}\r\n","import { Component, OnInit, Inject, AfterViewInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { InjectionService } from '../_services/injection.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { NgDynamicBreadcrumbService } from 'ng-dynamic-breadcrumb';\r\nimport { UserWellsService } from '../user-wells.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ApiResultErrorDialogComponent } from '../api-result-error-dialog/api-result-error-dialog.component';\r\nimport { InjectionFormationsEditorComponent } from '../injection-formations-editor/injection-formations-editor.component';\r\n\r\n@Component({\r\n selector: 'app-injection-record-editor',\r\n templateUrl: './injection-record-editor.component.html',\r\n styleUrls: ['./injection-record-editor.component.css']\r\n})\r\nexport class InjectionRecordEditorComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n injectionDetailsSubscription: Subscription;\r\n wellDetailsSubscription: Subscription;\r\n\r\n injectionDetails: InjectionDataRecord = new InjectionDataRecord();\r\n\r\n wellDetails: WellDetailsModel = null;\r\n\r\n mainFormGroup: FormGroup;\r\n injectionId: number;\r\n wellId: number;\r\n\r\n @ViewChild(InjectionFormationsEditorComponent) injectionFormationsForm: InjectionFormationsEditorComponent;\r\n\r\n constructor(\r\n private actRoute: ActivatedRoute,\r\n private formBuilder: FormBuilder,\r\n private injectionService: InjectionService,\r\n public userWellsService: UserWellsService,\r\n protected router: Router,\r\n protected breadcrumbService: NgDynamicBreadcrumbService,\r\n protected dialog: MatDialog\r\n ) {\r\n\r\n this.injectionId = this.actRoute.snapshot.params.injectionId;\r\n this.wellId = this.actRoute.snapshot.params.wellId;\r\n\r\n this.refreshForm();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.injectionService.GetInjectionDetailsForId(this.injectionId);\r\n this.userWellsService.LoadDetailsWell(this.wellId);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.injectionDetailsSubscription = this.injectionService.getInjectionDetailsForIdComplete.subscribe((result: InjectionDataRecord) => {\r\n this.injectionDetails = result;\r\n\r\n this.userWellsService.LoadDetailsWell(this.injectionDetails.WellId);\r\n\r\n var stringFormat = this.injectionService.getDateStringFormat(this.injectionDetails)\r\n var injDate = this.injectionDetails.InjectionDate;\r\n\r\n function formatDate(date, format) {\r\n const monthAbbreviations = [\r\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\r\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\r\n ];\r\n var d = new Date(date),\r\n month = '' + (d.getMonth() + 1),\r\n day = '' + d.getDate(),\r\n year = d.getFullYear();\r\n\r\n if (month.length < 2) \r\n month = '0' + month;\r\n if (day.length < 2) \r\n day = '0' + day;\r\n\r\n if (format == 'yyyy/MM/dd') {\r\n return [year, month, day].join('-');\r\n } else {\r\n return monthAbbreviations[parseInt(month) - 1] + ' ' + year;\r\n }\r\n }\r\n\r\n var breadcrumbdata = {\r\n InjectionDate: formatDate(injDate, stringFormat)\r\n };\r\n\r\n this.breadcrumbService.updateBreadcrumbLabels(breadcrumbdata);\r\n\r\n //this.refreshForm();\r\n this.mainFormGroup.patchValue(this.injectionDetails);\r\n },\r\n (err) => {\r\n //Handle an error where the injection details record didn't load for some reason.\r\n });\r\n\r\n //Subscribe to the well details service\r\n this.wellDetailsSubscription = this.userWellsService.detailsWell.subscribe((result: WellDetailsModel) => {\r\n this.wellDetails = result;\r\n\r\n var breadcrumbdata = {\r\n Uicnumber: this.wellDetails.Uicnumber.toString()\r\n };\r\n\r\n this.breadcrumbService.updateBreadcrumbLabels(breadcrumbdata);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.injectionDetailsSubscription.unsubscribe();\r\n this.wellDetailsSubscription.unsubscribe();\r\n }\r\n\r\n save() {\r\n\r\n var injModel = this.mainFormGroup.value;\r\n\r\n var formationFormValue = this.injectionFormationsForm.form.value;\r\n\r\n var formationIds = formationFormValue.FormationIds;\r\n\r\n injModel.FormationIds = formationIds;\r\n \r\n this.injectionService.UpdateRecord(injModel).then((result) => {\r\n\r\n if (result.Success) {\r\n\r\n var destinationUrl = \"well/\" + this.wellId;\r\n\r\n this.router.navigateByUrl(destinationUrl);\r\n }\r\n else {\r\n var dialogRef = this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: result\r\n });\r\n }\r\n },\r\n (result) => {\r\n var dialogRef = this.dialog.open(ApiResultErrorDialogComponent, {\r\n data: result\r\n });\r\n });\r\n }\r\n\r\n refreshForm() {\r\n\r\n function otherDataValidator() {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n var ret: any = {};\r\n\r\n //Make sure that the top and bottom of the injection interval are not reverse.\r\n if (group.controls.CurrentInjectionIntervalTop != null &&\r\n group.controls.CurrentInjectionIntervalBottom != null &&\r\n group.controls.CurrentInjectionIntervalTop.value != null &&\r\n group.controls.CurrentInjectionIntervalBottom.value != null &&\r\n group.controls.CurrentInjectionIntervalTop.value > group.controls.CurrentInjectionIntervalBottom.value) {\r\n ret.injectionIntervalReversed = true;\r\n }\r\n\r\n if (group.controls.CurrentInjectionIntervalTop != null &&\r\n group.controls.DepthTubingPacker != null &&\r\n group.controls.DepthTubingPacker.value > group.controls.CurrentInjectionIntervalTop.value) {\r\n ret.tubingPackerTooDeep = true;\r\n }\r\n\r\n var keys = Object.keys(group.controls);\r\n\r\n var sum = 0;\r\n var hasValues = false;\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n if (group.controls[keys[i]].value != null && keys[i].startsWith(\"Fraction\")) {\r\n hasValues = true;\r\n sum += group.controls[keys[i]].value;\r\n }\r\n }\r\n\r\n if (hasValues && sum != 100) {\r\n ret.notEquals100 = true;\r\n ret.totalPercentages = sum;\r\n }\r\n\r\n if (group.controls.FractionOther.value != null &&\r\n group.controls.FractionOther.value != 0 &&\r\n (group.controls.OtherDesc.value == null ||\r\n group.controls.OtherDesc.value == \"\")) {\r\n ret.noOtherDesc = true;\r\n }\r\n\r\n\r\n return ret;\r\n }\r\n }\r\n\r\n function individualFractionValidator() {\r\n return (control: FormControl): {\r\n [key: string]: any\r\n } => {\r\n var ret: any = {\r\n };\r\n\r\n if (control.value != null && control.value > 100) {\r\n ret.greaterThan100 = true;\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n this.mainFormGroup = this.formBuilder.group(\r\n {\r\n 'Id': [this.injectionDetails.Id, []],\r\n 'WellId': [this.injectionDetails.WellId, []],\r\n 'InjectionDate': [this.injectionDetails.InjectionDate, []],\r\n 'InjectionEndDate': [this.injectionDetails.InjectionEndDate, []],\r\n 'InjectionPressureAveragePsig': [this.injectionDetails.InjectionPressureAveragePsig, [Validators.required]],\r\n 'InjectionPressureMaxPsig': [this.injectionDetails.InjectionPressureMaxPsig, [Validators.required]],\r\n 'VolumeInjectedBbl': [this.injectionDetails.VolumeInjectedBbl, [Validators.required]],\r\n 'TotalGasVolumeMcf': [this.injectionDetails.TotalGasVolumeMcf],\r\n 'AnnulusPressureNumReadings': [this.injectionDetails.AnnulusPressureNumReadings, []],\r\n 'AnnulusPressureMinPsig': [this.injectionDetails.AnnulusPressureMinPsig, []],\r\n 'AnnulusPressureMaxPsig': [this.injectionDetails.AnnulusPressureMaxPsig, []],\r\n 'CurrentInjectionIntervalTop': [this.injectionDetails.CurrentInjectionIntervalTop, []],\r\n 'CurrentInjectionIntervalBottom': [this.injectionDetails.CurrentInjectionIntervalBottom, []],\r\n 'Formation': [this.injectionDetails.Formation, []],\r\n 'DepthTubingPacker': [this.injectionDetails.DepthTubingPacker, []],\r\n 'InjectedFluidsOtherSources': [this.injectionDetails.InjectedFluidsOtherSources, []],\r\n 'InjectionThrough': [this.injectionDetails.InjectionThrough, []],\r\n 'FractionSaltWater': [this.injectionDetails.FractionSaltWater, individualFractionValidator()],\r\n 'FractionFreshWater': [this.injectionDetails.FractionFreshWater, individualFractionValidator()],\r\n 'FractionFractureWaterFlowBack': [this.injectionDetails.FractionFractureWaterFlowBack, individualFractionValidator()],\r\n 'FractionNorm': [this.injectionDetails.FractionNorm, individualFractionValidator()],\r\n 'FractionCo2': [this.injectionDetails.FractionCo2, individualFractionValidator()],\r\n 'FractionNaturalGas': [this.injectionDetails.FractionNaturalGas, individualFractionValidator()],\r\n 'FractionH2s': [this.injectionDetails.FractionH2s, individualFractionValidator()],\r\n 'FractionPolymer': [this.injectionDetails.FractionPolymer, individualFractionValidator()],\r\n 'FractionSteam': [this.injectionDetails.FractionSteam, individualFractionValidator()],\r\n 'FractionAir': [this.injectionDetails.FractionAir, individualFractionValidator()],\r\n 'FractionNitrogen': [this.injectionDetails.FractionNitrogen, individualFractionValidator()],\r\n 'FractionOther': [this.injectionDetails.FractionOther, individualFractionValidator()],\r\n 'OtherDesc': [this.injectionDetails.OtherDesc],\r\n 'MaxDayInjLiqRate': [this.injectionDetails.MaxDayInjLiqRate],\r\n 'MaxDayInjGasRate': [this.injectionDetails.MaxDayInjGasRate]\r\n }, {\r\n validator: otherDataValidator()\r\n });\r\n }\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'app-loading-dialog',\r\n templateUrl: './loading-dialog.component.html',\r\n styleUrls: ['./loading-dialog.component.css']\r\n})\r\nexport class LoadingDialogComponent implements OnInit {\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { AuthenticationService } from '../_services/authentication.service';\r\nimport { first } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.css']\r\n})\r\nexport class LoginComponent implements OnInit {\r\n\r\n\r\n loginForm: FormGroup;\r\n\r\n loading = false;\r\n submitted = false;\r\n returnUrl: string;\r\n error = \"\";\r\n\r\n public username: string = \"\";\r\n public password: string = \"\";\r\n\r\n constructor(private formBuilder: FormBuilder,\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private authenticationService: AuthenticationService) {\r\n\r\n this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';\r\n\r\n }\r\n\r\n onSubmit() {\r\n this.submitted = true;\r\n\r\n if (this.loginForm.invalid) {\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n this.authenticationService.login(this.f.username.value, this.f.password.value)\r\n .pipe(first())\r\n .subscribe(\r\n data => {\r\n this.router.navigate([this.returnUrl]);\r\n },\r\n error => {\r\n this.error = error;\r\n this.loading = false;\r\n }\r\n );\r\n }\r\n\r\n get f() { return this.loginForm.controls; }\r\n\r\n ngOnInit(): void {\r\n this.loginForm = this.formBuilder.group({\r\n username: ['', Validators.required],\r\n password: ['', Validators.required]\r\n });\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-message-dialog',\r\n templateUrl: './message-dialog.component.html',\r\n styleUrls: ['./message-dialog.component.css']\r\n})\r\nexport class MessageDialogComponent implements OnInit {\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n }\r\n \r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { BaseDateRangeSelectorComponent } from '../base-date-range-selector/base-date-range-selector.component';\r\n\r\n@Component({\r\n selector: 'app-monthly-date-range-selector',\r\n templateUrl: './monthly-date-range-selector.component.html',\r\n styleUrls: ['./monthly-date-range-selector.component.css']\r\n})\r\nexport class MonthlyDateRangeSelectorComponent extends BaseDateRangeSelectorComponent implements OnInit {\r\n\r\n monthOptions: Array = new Array();\r\n yearOptions: Array = new Array();\r\n\r\n beginYear: number;\r\n beginMonth: any;\r\n\r\n endYear: number;\r\n endMonth: any;\r\n\r\n constructor(\r\n formBuilder: FormBuilder\r\n )\r\n {\r\n super(formBuilder);\r\n\r\n var curdate = new Date();\r\n\r\n var yearNow = curdate.getFullYear();\r\n\r\n for (var i = yearNow; i > yearNow - 20; i--) {\r\n this.yearOptions.push(i);\r\n }\r\n\r\n const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\r\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n ];\r\n\r\n for (var i = 0; i < monthNames.length; i++) {\r\n var monthOpt = {\r\n name: monthNames[i],\r\n number: (i)\r\n };\r\n\r\n this.monthOptions.push(monthOpt);\r\n }\r\n\r\n var oneMonthAgo = new Date();\r\n oneMonthAgo.setMonth(oneMonthAgo.getMonth() - 1);\r\n\r\n var lastYear = new Date();\r\n lastYear.setMonth(lastYear.getMonth() - 12);\r\n\r\n this.endYear = oneMonthAgo.getFullYear();\r\n this.endMonth = this.monthOptions[oneMonthAgo.getMonth()];\r\n\r\n this.beginYear = lastYear.getFullYear();\r\n this.beginMonth = this.monthOptions[lastYear.getMonth()];\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n super.ngOnInit();\r\n\r\n //Add form controls that are specific to our year/month scenario\r\n this.dateBoundsSelectionForm.addControl(\"FromYear\", new FormControl(this.beginYear, []));\r\n this.dateBoundsSelectionForm.addControl(\"FromMonth\", new FormControl(this.beginMonth, []));\r\n this.dateBoundsSelectionForm.addControl(\"ToYear\", new FormControl(this.endYear, []));\r\n this.dateBoundsSelectionForm.addControl(\"ToMonth\", new FormControl(this.endMonth, []));\r\n\r\n this.dateBoundsSelectionForm.get(\"FromYear\").valueChanges.subscribe(selectedValue => {\r\n this.beginYear = selectedValue;\r\n this.updateBeginDate();\r\n });\r\n\r\n this.dateBoundsSelectionForm.get(\"FromMonth\").valueChanges.subscribe(selectedValue => {\r\n this.beginMonth = selectedValue;\r\n this.updateBeginDate();\r\n });\r\n\r\n this.dateBoundsSelectionForm.get(\"ToYear\").valueChanges.subscribe(selectedValue => {\r\n this.endYear = selectedValue;\r\n this.updateEndDate();\r\n });\r\n\r\n this.dateBoundsSelectionForm.get(\"ToMonth\").valueChanges.subscribe(selectedValue => {\r\n this.endMonth = selectedValue;\r\n this.updateEndDate();\r\n });\r\n\r\n this.dateBoundsSelectionForm.controls.FromYear.setValue(this.beginYear);\r\n this.dateBoundsSelectionForm.controls.FromMonth.setValue(this.beginMonth);\r\n\r\n this.dateBoundsSelectionForm.controls.ToYear.setValue(this.endYear);\r\n this.dateBoundsSelectionForm.controls.ToMonth.setValue(this.endMonth);\r\n }\r\n\r\n setToLastDayOfMonth(date) {\r\n // Create a new Date object for the first day of the next month\r\n const year = date.getFullYear();\r\n const month = date.getMonth();\r\n const nextMonth = new Date(year, month + 1, 1);\r\n\r\n // Subtract one day to get the last day of the current month\r\n const lastDayOfMonth = new Date(nextMonth.getTime() - 1);\r\n\r\n // Update the original date with the last day of the month\r\n date.setDate(lastDayOfMonth.getDate());\r\n\r\n return date;\r\n }\r\n\r\n updateEndDate() {\r\n var date = new Date();\r\n date.setFullYear(this.endYear);\r\n date.setMonth(this.endMonth.number);\r\n date.setDate(1);\r\n date.setHours(0);\r\n date.setMinutes(0);\r\n date.setSeconds(0);\r\n date.setMilliseconds(0);\r\n date = this.setToLastDayOfMonth(date);\r\n\r\n this.endDate = date;\r\n if (this.dateBoundsSelectionForm != null) {\r\n this.dateBoundsSelectionForm.controls.EndDate.setValue(date);\r\n }\r\n }\r\n\r\n updateBeginDate() {\r\n var date = new Date();\r\n date.setFullYear(this.beginYear);\r\n date.setMonth(this.beginMonth.number);\r\n date.setDate(1);\r\n date.setHours(0);\r\n date.setMinutes(0);\r\n date.setSeconds(0);\r\n date.setMilliseconds(0);\r\n\r\n this.beginDate = date;\r\n\r\n if (this.dateBoundsSelectionForm != null) {\r\n this.dateBoundsSelectionForm.controls.BeginDate.setValue(date);\r\n }\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { UserOperatorModel } from '../_models/user-operator-model';\r\nimport { AuthenticationService } from '../_services/authentication.service';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\n\r\n@Component({\r\n selector: 'app-nav-menu',\r\n templateUrl: './nav-menu.component.html',\r\n styleUrls: ['./nav-menu.component.css']\r\n})\r\nexport class NavMenuComponent {\r\n isExpanded = false;\r\n\r\n userOperators: Array = new Array();\r\n\r\n constructor(public authenticationService: AuthenticationService, public userAccountService: UserAccountService, private _router: Router) {\r\n\r\n this.authenticationService.currentUserSubject.subscribe((newUserModel) => {\r\n\r\n this.userOperators = new Array();\r\n\r\n if (newUserModel != null) {\r\n this.userAccountService.fetchOperatorsForUser(newUserModel.Id).then((operatorJunctions) => {\r\n this.userOperators = operatorJunctions;\r\n },\r\n (err) => {\r\n this.userOperators = new Array();\r\n });\r\n }\r\n });\r\n\r\n }\r\n\r\n isUserAnApprover() {\r\n\r\n var approverJunctions = this.userOperators.find((element) => {\r\n return element.IsApprover;\r\n });\r\n\r\n return (approverJunctions != null);\r\n }\r\n\r\n isUserAnAdmin() {\r\n var ret = false;\r\n\r\n if (this.authenticationService.currentUserSubject.value != null) {\r\n var user = this.authenticationService.currentUserSubject.value;\r\n\r\n if (user.Role == \"Admin\") {\r\n ret = true;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n collapse() {\r\n this.isExpanded = false;\r\n }\r\n\r\n toggle() {\r\n this.isExpanded = !this.isExpanded;\r\n }\r\n\r\n logout() {\r\n this.authenticationService.logout();\r\n this._router.navigateByUrl('/login');\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ViewChild, Input} from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { FluidFractionFormComponent } from '../fluid-fraction-form/fluid-fraction-form.component';\r\nimport { InjectionFormationsEditorComponent } from '../injection-formations-editor/injection-formations-editor.component';\r\nimport { InjectionDataModel } from '../_models/injection-data-model';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\n\r\n@Component({\r\n selector: 'app-other-data-form',\r\n templateUrl: './other-data-form.component.html',\r\n styleUrls: ['./other-data-form.component.css']\r\n})\r\nexport class OtherDataFormComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() injectionDataModel: InjectionDataModel;\r\n @Input() well: WellDetailsModel;\r\n @Input() lastInjection: InjectionDataRecord;\r\n\r\n @ViewChild(FluidFractionFormComponent) fluidFractionForm: FluidFractionFormComponent;\r\n @ViewChild(InjectionFormationsEditorComponent) injectionFormationsForm: InjectionFormationsEditorComponent;\r\n\r\n public form: FormGroup;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n function otherDataValidator() {\r\n return (group: FormGroup): { [key: string]: any } => {\r\n var ret: any = {};\r\n\r\n //Make sure that the top and bottom of the injection interval are not reverse.\r\n if (group.controls.CurrentInjectionIntervalTop != null &&\r\n group.controls.CurrentInjectionIntervalBottom != null &&\r\n group.controls.CurrentInjectionIntervalTop.value != null &&\r\n group.controls.CurrentInjectionIntervalBottom.value != null &&\r\n group.controls.CurrentInjectionIntervalTop.value > group.controls.CurrentInjectionIntervalBottom.value) {\r\n ret.injectionIntervalReversed = true;\r\n }\r\n\r\n if (group.controls.CurrentInjectionIntervalTop != null &&\r\n group.controls.DepthTubingPacker != null &&\r\n group.controls.DepthTubingPacker.value > group.controls.CurrentInjectionIntervalTop.value) {\r\n ret.tubingPackerTooDeep = true;\r\n }\r\n\r\n return ret;\r\n }\r\n }\r\n\r\n this.form = this.formBuilder.group({\r\n 'CurrentInjectionIntervalTop': [this.injectionDataModel.CurrentInjectionIntervalTop],\r\n 'CurrentInjectionIntervalBottom': [this.injectionDataModel.CurrentInjectionIntervalBottom],\r\n 'DepthTubingPacker': [this.injectionDataModel.DepthTubingPacker],\r\n 'InjectedFluidsOtherSources': [this.injectionDataModel.InjectedFluidsOtherSources],\r\n 'InjectionThrough': [this.injectionDataModel.InjectionThrough]\r\n }, {\r\n validator: otherDataValidator()\r\n });\r\n \r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n setTimeout(() => {\r\n this.form.addControl('FluidFractionForm', this.fluidFractionForm.form);\r\n });\r\n\r\n \r\n setTimeout(() => {\r\n this.form.addControl('InjectionFormationsEditor', this.injectionFormationsForm.form);\r\n });\r\n }\r\n}\r\n","import { Component, OnInit, AfterViewInit, ApplicationRef} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, ValidatorFn, AsyncValidatorFn, AbstractControl } from '@angular/forms';\r\nimport { OperatorService } from '../_services/operator.service';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\nimport { OperatorModel } from '../_models/operator-model';\r\nimport { debounceTime, filter } from 'rxjs/operators';\r\nimport { NewUserRequestModel } from '../_models/new-user-request-model';\r\nimport { APIOperationResult } from '../_models/apioperation-result';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-register',\r\n templateUrl: './register.component.html',\r\n styleUrls: ['./register.component.css']\r\n})\r\nexport class RegisterComponent implements OnInit, AfterViewInit {\r\n\r\n emailAddressForm: FormGroup;\r\n tellUsAboutForm: FormGroup;\r\n operatorsForm: FormGroup;\r\n\r\n operatorSearchTimeout: any;\r\n\r\n operatorCandidates: Array;\r\n selectedOperators: Array = new Array();\r\n\r\n existingEmailCheckTimeout: any;\r\n\r\n emailModel: any = {\r\n emailAddress: \"\",\r\n emailChecked: false,\r\n emailNotExists: true,\r\n password: \"\",\r\n confirmPassword: \"\"\r\n };\r\n\r\n tellUsAboutModel: any = {\r\n firstName: \"\",\r\n lastName: \"\",\r\n RRCP5: \"\"\r\n };\r\n\r\n operatorsFormModel: any = {\r\n searchOperatorNumber: \"\",\r\n selectedOperators: []\r\n };\r\n\r\n constructor(protected formBuilder: FormBuilder,\r\n public userAccountService: UserAccountService,\r\n public operatorService: OperatorService,\r\n protected appRef: ApplicationRef,\r\n protected dialog: MatDialog,\r\n protected router: Router\r\n )\r\n {\r\n var _this = this;\r\n\r\n function selectedOperatorsValidator() {\r\n return (control: AbstractControl) => {\r\n var ret: any = {};\r\n\r\n var operatorsArray = control.value;\r\n\r\n if (operatorsArray.length != null && operatorsArray.length == 0) {\r\n ret.noOperators = true;\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n function passwordValidator() {\r\n return (control: AbstractControl) => {\r\n var ret: any = {};\r\n\r\n var password = control.value;\r\n\r\n if (password.length < 8) {\r\n ret.tooShort = true;\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n function confirmPasswordValidator() {\r\n return (control: AbstractControl) => {\r\n var ret: any = {};\r\n\r\n var firstPasswordControl = control.get(\"password\");\r\n var confirmPasswordControl = control.get(\"confirmPassword\");\r\n\r\n if (firstPasswordControl != null && confirmPasswordControl != null) {\r\n var passwordValue = firstPasswordControl.value;\r\n var confirmPasswordValue = confirmPasswordControl.value;\r\n\r\n if (passwordValue != confirmPasswordValue) {\r\n ret.noMatch = \"Passwords must match.\";\r\n }\r\n }\r\n else {\r\n ret.error = \"Something unexpected went wrong.\";\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n this.emailAddressForm = this.formBuilder.group({\r\n 'emailAddress': [this.emailModel.emailAddress, [Validators.required, Validators.email]],\r\n 'emailChecked': [this.emailModel.emailChecked, [Validators.requiredTrue]],\r\n 'emailNotExists': [this.emailModel.emailNotExists, [Validators.requiredTrue]],\r\n 'password': [this.emailModel.password, [Validators.required, passwordValidator()]],\r\n 'confirmPassword': [this.emailModel.confirmPassword, [Validators.required]]\r\n }, {\r\n validators: confirmPasswordValidator()\r\n });\r\n\r\n this.tellUsAboutForm = this.formBuilder.group({\r\n 'firstName': [this.tellUsAboutModel.firstName, [Validators.required]],\r\n 'lastName': [this.tellUsAboutModel.lastName, [Validators.required]],\r\n 'phone': [this.tellUsAboutModel.phone, [Validators.required]]\r\n });\r\n\r\n this.operatorsForm = this.formBuilder.group({\r\n 'searchOperatorNumber': [this.operatorsFormModel.searchOperatorNumber, []],\r\n 'selectedOperators': [this.selectedOperators, [selectedOperatorsValidator()]]\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n \r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n this.operatorsForm.get(\"searchOperatorNumber\").valueChanges.pipe(filter((val) => val.length === 6),\r\n debounceTime(500)).subscribe((x) => {\r\n this.updateOperatorSearchResults(x);\r\n });\r\n\r\n }\r\n\r\n doExistingEmailCheck() {\r\n\r\n var _this = this;\r\n\r\n this.emailAddressForm.get(\"emailChecked\").setValue(\"false\");\r\n\r\n if (!this.emailAddressForm.get(\"emailAddress\").hasError(\"email\")) {\r\n\r\n if (this.existingEmailCheckTimeout != null) {\r\n clearTimeout(this.existingEmailCheckTimeout);\r\n }\r\n\r\n this.existingEmailCheckTimeout = setTimeout(function () {\r\n _this.userAccountService.validateEmail(_this.emailAddressForm.get(\"emailAddress\").value).then((result) => {\r\n\r\n _this.emailAddressForm.get(\"emailChecked\").setValue(true);\r\n\r\n if (result.alreadyExists != null && result.alreadyExists == true) {\r\n _this.emailAddressForm.get(\"emailNotExists\").setValue(false);\r\n }\r\n else {\r\n _this.emailAddressForm.get(\"emailNotExists\").setValue(true);\r\n }\r\n\r\n //Force change detection\r\n _this.appRef.tick();\r\n },\r\n (err) => {\r\n });\r\n }, 750);\r\n }\r\n }\r\n\r\n getEmailAddressErrorMessage() {\r\n var ret = null;\r\n\r\n if (this.emailAddressForm.get(\"emailAddress\").hasError(\"required\")) {\r\n ret = \"An email address is required for registration.\";\r\n }\r\n else if (this.emailAddressForm.get(\"emailAddress\").hasError(\"email\")) {\r\n ret = \"Not a valid email address.\";\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n onStepChange(event: Event) {\r\n\r\n }\r\n\r\n updateOperatorSearchResults(currentVal) {\r\n //Perform the search\r\n this.operatorService.searchByP5Number(currentVal).then((operCandidates: Array) => {\r\n this.operatorCandidates = operCandidates;\r\n },\r\n (err) => {\r\n });\r\n }\r\n\r\n selectOperator(oper) {\r\n var found = this.selectedOperators.find((x: OperatorModel) => {\r\n var ret = false;\r\n\r\n if (x.Id == oper.Id) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n });\r\n\r\n if (found == null) {\r\n this.selectedOperators.push(oper);\r\n\r\n this.operatorsForm.get(\"selectedOperators\").setValue(this.selectedOperators);\r\n }\r\n }\r\n\r\n removeOperator(oper) {\r\n var ind = this.selectedOperators.indexOf(oper);\r\n\r\n this.selectedOperators.splice(ind, 1);\r\n\r\n this.operatorsForm.get(\"selectedOperators\").setValue(this.selectedOperators);\r\n }\r\n\r\n doSubmit() {\r\n var newUserModel = new NewUserRequestModel();\r\n\r\n //Grab our values and put them into our submit model.\r\n newUserModel.email = this.emailAddressForm.get(\"emailAddress\").value;\r\n newUserModel.password = this.emailAddressForm.get(\"password\").value;\r\n newUserModel.firstName = this.tellUsAboutForm.get(\"firstName\").value;\r\n newUserModel.lastName = this.tellUsAboutForm.get(\"lastName\").value;\r\n newUserModel.phone = this.tellUsAboutForm.get(\"phone\").value;\r\n\r\n var operators = this.operatorsForm.get(\"selectedOperators\").value;\r\n\r\n for (var i = 0; i < operators.length; i++) {\r\n newUserModel.operators.push(operators[i].Id);\r\n }\r\n\r\n //Submit the new user account...\r\n this.userAccountService.submitNewUser(newUserModel).then((result: APIOperationResult) => {\r\n if (result.Success) {\r\n\r\n //If we had a success message, display the confirmation dialog, which talks about how\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"User Account Created\",\r\n message: \"Your user account has been created successfully. Before you can log in, confirmation is required by you and the designated approver at the operator you have selected. An email has been dispatched to the address you gave with instructions regarding how to complete this process. Please read and follow the instructions it provides carefully.\"\r\n }\r\n }).afterClosed().subscribe(() => {\r\n //Navigate back to the login page.\r\n this.router.navigate(['/login']);\r\n });\r\n }\r\n else {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Error\",\r\n message: \"An error occurred while attempting to create your account. You can try clicking on the submit button again, but if this problem persists, you should contact the administrator.\"\r\n }\r\n });\r\n }\r\n },\r\n (err) => {\r\n });\r\n\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { APIOperationResult } from '../_models/apioperation-result';\r\nimport { ResetPasswordArgs } from '../_models/reset-password-args';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\n\r\n@Component({\r\n selector: 'app-reset-password',\r\n templateUrl: './reset-password.component.html',\r\n styleUrls: ['./reset-password.component.css']\r\n})\r\nexport class ResetPasswordComponent implements OnInit {\r\n\r\n public resetPasswordArgs: ResetPasswordArgs = new ResetPasswordArgs();\r\n\r\n public passwordResetForm: FormGroup;\r\n\r\n constructor(\r\n public formBuilder: FormBuilder,\r\n public usersService: UserAccountService,\r\n public dialog: MatDialog,\r\n public router: Router\r\n )\r\n {\r\n this.passwordResetForm = this.formBuilder.group({\r\n 'emailAddress': [this.resetPasswordArgs.emailAddress, []]\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n onSubmit() {\r\n var resetArgs = this.passwordResetForm.value;\r\n\r\n this.usersService.resetPasssword(resetArgs).then((result: APIOperationResult) => {\r\n\r\n //If we had a success message, display the confirmation dialog, which talks about how\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Password Reset\",\r\n message: \"If the user account attached to the given email exists, the password has been reset and a message dispatched to that email address with further instructions.\"\r\n }\r\n }).afterClosed().subscribe(() => {\r\n //Navigate back to the login page.\r\n this.router.navigate(['/login']);\r\n });\r\n },\r\n (err) => {\r\n });\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, AfterViewInit, ChangeDetectorRef } from '@angular/core';\r\nimport { DailyDateRangeSelectorComponent } from '../daily-date-range-selector/daily-date-range-selector.component';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-select-period-dialog',\r\n templateUrl: './select-period-dialog.component.html',\r\n styleUrls: ['./select-period-dialog.component.css']\r\n})\r\n\r\nexport class SelectPeriodDialogComponent implements OnInit {\r\n\r\n @ViewChild(\"dateRangeSelector\") dateRangeSelector: DailyDateRangeSelectorComponent;\r\n\r\n beginDate: BehaviorSubject = new BehaviorSubject(null);\r\n endDate: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n beginDateSubscription: Subscription;\r\n endDateSubscription: Subscription;\r\n\r\n dateBoundsSelectionForm: FormGroup;\r\n useOldDataForm: FormGroup;\r\n\r\n constructor(private formBuilder: FormBuilder, private cdr: ChangeDetectorRef, public dialogRef: MatDialogRef) { }\r\n\r\n ngOnInit(): void {\r\n this.dateBoundsSelectionForm = this.formBuilder.group({\r\n });\r\n this.useOldDataForm = this.formBuilder.group({\r\n 'useOldInjectionValues': [true, []]\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initDateBoundsSelectionForm();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n initDateBoundsSelectionForm() {\r\n this.dateBoundsSelectionForm.addControl('dateBoundsSelectionForm', this.dateRangeSelector.dateBoundsSelectionForm);\r\n\r\n this.beginDateSubscription = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").valueChanges.subscribe((newvalue) => {\r\n this.beginDate.next(newvalue);\r\n });\r\n\r\n this.endDateSubscription = this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").valueChanges.subscribe((newvalue) => {\r\n this.endDate.next(newvalue);\r\n });\r\n\r\n //We have to manually grab these values initially.\r\n this.beginDate.next(this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"BeginDate\").value);\r\n this.endDate.next(this.dateBoundsSelectionForm.controls.dateBoundsSelectionForm.get(\"EndDate\").value);\r\n }\r\n\r\n\r\n btnClicked(name) {\r\n if (name == 'Cancel') {\r\n this.dialogRef.close(null);\r\n }\r\n if (name == 'Create') {\r\n let result = {\r\n beginDate: this.beginDate.value,\r\n endDate: this.endDate.value,\r\n useLastInjData: this.useOldDataForm.value.useOldInjectionValues\r\n }\r\n this.dialogRef.close(result);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-sideload-injection',\n templateUrl: './sideload-injection.component.html',\n styleUrls: ['./sideload-injection.component.css']\n})\nexport class SideloadInjectionComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\n\r\n@Component({\r\n selector: 'app-user-confirm',\r\n templateUrl: './user-confirm.component.html',\r\n styleUrls: ['./user-confirm.component.css']\r\n})\r\nexport class UserConfirmComponent implements OnInit {\r\n\r\n public confirmSuccess: boolean = false;\r\n\r\n constructor(\r\n private actRoute: ActivatedRoute,\r\n public userService: UserAccountService)\r\n {\r\n var userId = this.actRoute.snapshot.params.userid;\r\n var confirmationCode = this.actRoute.snapshot.params.confirmationcode;\r\n\r\n userService.confirmUser(userId, confirmationCode).then((result) => {\r\n if (result.Success) {\r\n this.confirmSuccess = true;\r\n }\r\n else {\r\n \r\n }\r\n },\r\n (err) => {\r\n\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, AfterViewInit } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { User } from '../_models/user';\r\nimport { OperatorModel } from '../_models/operator-model';\r\nimport { AuthenticationService } from '../_services/authentication.service';\r\nimport { UserAccountService } from '../_services/user-account.service';\r\nimport { OperatorService } from '../_services/operator.service';\r\nimport { debounceTime, filter } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-user-settings',\r\n templateUrl: './user-settings.component.html',\r\n styleUrls: ['./user-settings.component.css']\r\n})\r\nexport class UserSettingsComponent implements OnInit {\r\n\r\n public userModel: User;\r\n public changePasswordForm: FormGroup;\r\n\r\n public operatorsForm: FormGroup;\r\n selectedOperators: Array = new Array();\r\n operatorCandidates: Array;\r\n\r\n public approvedOperators: Array = new Array();\r\n\r\n operatorsFormModel: any = {\r\n searchOperatorNumber: \"\",\r\n selectedOperators: []\r\n };\r\n\r\n public changePasswordModel: any = {\r\n oldPassword: \"\",\r\n newPassword: \"\",\r\n repeatNewPassword: \"\"\r\n };\r\n\r\n constructor(public userAccountService: UserAccountService,\r\n public authenticationService: AuthenticationService,\r\n public operatorService: OperatorService,\r\n public formBuilder: FormBuilder,\r\n public dialog: MatDialog\r\n )\r\n {\r\n this.userModel = this.authenticationService.currentUserSubject.value;\r\n\r\n this.userAccountService.fetchOperatorsForUser(this.userModel.Id).then(\r\n (operators) => {\r\n this.approvedOperators = operators;\r\n }\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n function changePasswordValidator() {\r\n return function (control: AbstractControl) {\r\n var ret: any = {};\r\n\r\n if (control.get(\"newPassword\").value != control.get(\"repeatNewPassword\").value) {\r\n ret.passwordMismatch = true\r\n }\r\n\r\n if (control.get(\"newPassword\").value.length < 8 ||\r\n control.get(\"repeatNewPassword\").value.length < 8) {\r\n ret.passwordInvalid = true;\r\n }\r\n\r\n return ret;\r\n }\r\n }\r\n \r\n\r\n this.changePasswordForm = this.formBuilder.group({\r\n 'oldPassword': [this.changePasswordModel.oldPassword, [Validators.required]],\r\n 'newPassword': [this.changePasswordModel.newPassword, [Validators.required]],\r\n 'repeatNewPassword': [this.changePasswordModel.repeatNewPassword, [Validators.required]]\r\n }, {\r\n validator: changePasswordValidator()\r\n });\r\n\r\n\r\n function selectedOperatorsValidator() {\r\n return (control: AbstractControl) => {\r\n var ret: any = {};\r\n\r\n var operatorsArray = control.value;\r\n\r\n if (operatorsArray.length != null && operatorsArray.length == 0) {\r\n ret.noOperators = true;\r\n }\r\n\r\n return ret;\r\n };\r\n }\r\n\r\n\r\n this.operatorsForm = this.formBuilder.group({\r\n 'searchOperatorNumber': [this.operatorsFormModel.searchOperatorNumber, []],\r\n 'selectedOperators': [this.selectedOperators, [selectedOperatorsValidator()]]\r\n }, {\r\n\r\n });\r\n }\r\n\r\n updateOperatorSearchResults(currentVal) {\r\n //Perform the search\r\n this.operatorService.searchByP5Number(currentVal).then((operCandidates: Array) => {\r\n this.operatorCandidates = operCandidates;\r\n },\r\n (err) => {\r\n });\r\n }\r\n\r\n ngAfterViewInit() : void {\r\n this.operatorsForm.get(\"searchOperatorNumber\").valueChanges.pipe(filter((val) => val.length === 6),\r\n debounceTime(500)).subscribe((x) => {\r\n this.updateOperatorSearchResults(x);\r\n });\r\n }\r\n\r\n changePassword() {\r\n\r\n var submitModel = this.changePasswordForm.value;\r\n\r\n this.userAccountService.changePassword(this.userModel.Id, submitModel.oldPassword, submitModel.newPassword).then((result) => {\r\n if (result.Success) {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Success\",\r\n message: \"Your password has been changed. You will need to log in with the new password again.\"\r\n }\r\n });\r\n }\r\n },\r\n (err) => {\r\n });\r\n }\r\n\r\n selectOperator(oper) {\r\n var found = this.selectedOperators.find((x: OperatorModel) => {\r\n var ret = false;\r\n\r\n if (x.Id == oper.Id) {\r\n ret = true;\r\n }\r\n\r\n return ret;\r\n });\r\n\r\n if (found == null) {\r\n this.selectedOperators.push(oper);\r\n\r\n this.operatorsForm.get(\"selectedOperators\").setValue(this.selectedOperators);\r\n }\r\n }\r\n\r\n removeOperator(oper) {\r\n var ind = this.selectedOperators.indexOf(oper);\r\n\r\n this.selectedOperators.splice(ind, 1);\r\n\r\n this.operatorsForm.get(\"selectedOperators\").setValue(this.selectedOperators);\r\n }\r\n\r\n userHasThisOperator(operator) {\r\n var ret = false;\r\n\r\n for (var i = 0; i < this.approvedOperators.length; i++) {\r\n var approvedOperator = this.approvedOperators[i];\r\n\r\n if (operator.Id == approvedOperator.Id) {\r\n ret = true;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n requestSelectedOperators() {\r\n if (this.operatorsForm.valid) {\r\n\r\n var userId = this.userModel.Id;\r\n var operatorIds = [];\r\n\r\n for (var i = 0; i < this.selectedOperators.length; i++) {\r\n var operator = this.selectedOperators[i].Id;\r\n operatorIds.push(operator);\r\n }\r\n\r\n this.userAccountService.requestNewOperatorsForUser(userId, operatorIds).then(() => {\r\n //If we had a success message, display the confirmation dialog, which talks about how\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Request Completed\",\r\n message: \"Your request to join additional operators has been received and the designated approver for each operator has been notified. You will be notified when each request is approved.\"\r\n }\r\n }).afterClosed().subscribe(() => {\r\n //Clear out the selected operators.\r\n this.selectedOperators.splice(0, this.selectedOperators.length);\r\n });\r\n },\r\n () => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Error\",\r\n message: \"An error occurred while attempting process your request. You can try clicking on the submit button again, but if this problem persists, you should contact the administrator.\"\r\n }\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, FormArray, AbstractControl, FormControl, ValidationErrors, ControlContainer, NgForm } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nimport { UserSubmittableDataBatch } from '../_models/user-submittable-data-batch';\r\nimport { UserSubmittableDataRecord } from '../_models/user-submittable-data-record';\r\n\r\nimport { InjectionService } from '../_services/injection.service';\r\n\r\n@Component({\r\n selector: 'app-user-submittable-data-grid',\r\n templateUrl: './user-submittable-data-grid.component.html',\r\n styleUrls: ['./user-submittable-data-grid.component.css']\r\n})\r\nexport class UserSubmittableDataGridComponent implements OnInit {\r\n\r\n @Input()\r\n public DateFieldName: string = \"InjectionDate\";\r\n\r\n @Input()\r\n public dateFormat: string = null;\r\n \r\n public displayedColumns: string[] = []; \r\n\r\n public flexibleColumns: string[] = [];\r\n\r\n public auxiliaryFormState: Array = new Array();\r\n\r\n dataSource = new BehaviorSubject([]);\r\n \r\n protected _columnData: any = {};\r\n protected _rowValidators: Array;\r\n\r\n @Input()\r\n public set columnData(value: any) {\r\n this._columnData = value;\r\n\r\n this.buildColumnLists();\r\n }\r\n\r\n public get columnData() {\r\n return this._columnData;\r\n }\r\n\r\n @Input()\r\n public set rowValidators(value: Array) {\r\n this._rowValidators = value;\r\n }\r\n\r\n public get rowValidators() {\r\n return this._rowValidators;\r\n }\r\n\r\n private _userSubmittableService: any;\r\n\r\n @Input()\r\n public set userSubmittableService(value: any) {\r\n this._userSubmittableService = value\r\n\r\n this.handleSubmittableServiceSet();\r\n }\r\n\r\n public get userSubmittableService() {\r\n return this._userSubmittableService;\r\n }\r\n \r\n injectionDataGridForm: FormGroup;\r\n\r\n injectionFormRows: FormArray = this.formBuilder.array([]);\r\n\r\n public injectionForm: FormGroup | any = this.formBuilder.group({\r\n 'InjectionRows': this.injectionFormRows\r\n });\r\n\r\n injectionData: any;\r\n\r\n constructor(\r\n public formBuilder: FormBuilder,\r\n public injectionService: InjectionService\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n handleSubmittableServiceSet() {\r\n\r\n //Subscribe to the current injection batch\r\n this.userSubmittableService.currentBatch.subscribe((newBatch: UserSubmittableDataBatch) => {\r\n\r\n this.clearForm();\r\n\r\n if(newBatch != null) {\r\n //When we have a\r\n this.buildForm(newBatch);\r\n }\r\n \r\n });\r\n }\r\n \r\n buildColumnLists() {\r\n let keys = Object.keys(this._columnData);\r\n\r\n let displayedColumnsKeys = keys.slice();\r\n\r\n displayedColumnsKeys.unshift(this.DateFieldName);\r\n\r\n this.flexibleColumns = keys;\r\n this.displayedColumns = displayedColumnsKeys;\r\n }\r\n\r\n buildForm(newBatch: UserSubmittableDataBatch) {\r\n\r\n //save original data format for template reference\r\n this.injectionData = newBatch;\r\n\r\n this.auxiliaryFormState = new Array();\r\n\r\n newBatch.Injections.forEach((inj: UserSubmittableDataRecord, index) => {\r\n this.addInjectionFormRow(inj);\r\n\r\n //Create the auxiliary state object.\r\n this.addAuxiliaryStateObj(inj);\r\n\r\n let keys = Object.keys(this.columnData);\r\n\r\n keys.forEach((key) => {\r\n\r\n var columnProps = this.columnData[key];\r\n\r\n if(columnProps.type == \"manytomany\") {\r\n this.syncManyToManyOptions(key, index);\r\n }\r\n\r\n });\r\n });\r\n\r\n \r\n\r\n this.dataSource.next(this.injectionFormRows.controls);\r\n }\r\n\r\n addInjectionFormRow(inj: UserSubmittableDataRecord) {\r\n\r\n function IsDateValid(control: AbstractControl) {\r\n var testVal = control.value;\r\n\r\n var earliestAllowable = new Date('2010-01-01');\r\n\r\n var ret: any = {};\r\n\r\n \r\n let parsedDate = new Date(testVal);\r\n\r\n if (testVal == null) {\r\n ret.noDate = true;\r\n }\r\n else if (!(testVal instanceof Date) && !(parsedDate instanceof Date)) {\r\n ret.noDate = true;\r\n }\r\n else if (testVal < earliestAllowable) {\r\n ret.outOfBounds = true;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n let d = inj;\r\n\r\n let row = this.formBuilder.group({});\r\n\r\n //Add the injection date control, which is always shown on our injection data grid.\r\n var injDateControl = this.formBuilder.control(d[this.DateFieldName], [IsDateValid]);\r\n\r\n row.addControl(this.DateFieldName, injDateControl);\r\n\r\n //Now we do the variable ones...\r\n var columnKeys = Object.keys(this.columnData);\r\n\r\n columnKeys.forEach((key) => {\r\n let column = this.columnData[key];\r\n\r\n let validators = [];\r\n\r\n //Add the required validator, if needed.\r\n if(column.required != null && column.required === true) {\r\n validators.push(Validators.required)\r\n }\r\n\r\n //Add the minimum validator, if needed.\r\n if(column.min != null && !isNaN(column.min)){\r\n validators.push(Validators.min(column.min))\r\n }\r\n\r\n //Add the maximum validator, if needed.\r\n if(column.max != null && !isNaN(column.max)) {\r\n validators.push(Validators.max(column.max))\r\n }\r\n\r\n if(column.customValidators != null && column.customValidators.length > 0)\r\n {\r\n //Add the custom validators;\r\n column.customValidators.forEach((validator) => {\r\n validators.push(validator);\r\n });\r\n }\r\n\r\n //Grab the field value out of our data model...\r\n let value = d[key];\r\n\r\n if(column.type == \"manytomany\"){\r\n if(value.length > 0) {\r\n let arrValue = value.join(\",\");\r\n\r\n value = arrValue;\r\n\r\n }\r\n }\r\n\r\n let field = this.formBuilder.control(value, validators);\r\n\r\n row.addControl(key, field);\r\n });\r\n\r\n if(this.rowValidators != null) {\r\n\r\n }\r\n\r\n this.injectionFormRows.push(row);\r\n }\r\n\r\n addAuxiliaryStateObj(inj: UserSubmittableDataRecord) {\r\n let auxObj = {};\r\n\r\n //Now we do the variable ones...\r\n var columnKeys = Object.keys(this.columnData);\r\n\r\n columnKeys.forEach((key) => {\r\n let column = this.columnData[key];\r\n\r\n let auxFieldData = {};\r\n\r\n //If it's a many to many field...\r\n if(column.type == \"manytomany\") {\r\n\r\n column.options.forEach((option) => {\r\n auxFieldData[option.value] = false;\r\n });\r\n }\r\n\r\n auxObj[key] = auxFieldData;\r\n });\r\n\r\n this.auxiliaryFormState.push(auxObj);\r\n }\r\n \r\n clearForm() {\r\n this.injectionFormRows.clear();\r\n }\r\n\r\n fillColumn(columnName: string) {\r\n var rowsArray: FormArray = this.injectionForm.get('InjectionRows');\r\n\r\n //Look at the first row, and make sure our control exists.\r\n var firstRowGroup = rowsArray.get((0).toString());\r\n\r\n if (firstRowGroup != null) {\r\n var field = firstRowGroup.get(columnName);\r\n\r\n if (field != null) {\r\n var lastValue = null;\r\n for (var i = 0; i < rowsArray.length; i++) {\r\n var rowGroup = rowsArray.get(i.toString());\r\n\r\n var field = rowGroup.get(columnName);\r\n\r\n if (lastValue == null && field.value != null) {\r\n lastValue = field.value;\r\n }\r\n else if(lastValue != null) {\r\n this.setFieldValue(columnName, i, lastValue);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n clearColumn(columnId: string) {\r\n for(var i=0; i < this.injectionFormRows.controls.length; i++) {\r\n\r\n this.setFieldValue(columnId, i, null);\r\n }\r\n }\r\n\r\n setFieldValue(columnId, index, newValue) {\r\n //Get the row\r\n let row = this.injectionFormRows.at(index);\r\n\r\n //Get the field\r\n let field = row.get(columnId);\r\n\r\n //Get our column parameters.\r\n let columnData = this.columnData[columnId];\r\n\r\n if(columnData.type == \"checkbox\") {\r\n //In the case of the checkbox, if our value is not a true or false, set it to false, to avoid the possibility of making the form unrecoverably invalid.\r\n if(newValue !== false && newValue !== true) {\r\n newValue = false;\r\n }\r\n }\r\n\r\n //Actually set the form value\r\n field.setValue(newValue);\r\n\r\n //Do any follow up operations, such as syncing our auxiliary business.\r\n if(columnData.type == \"manytomany\") {\r\n this.syncManyToManyOptions(columnId, index);\r\n }\r\n }\r\n\r\n manyToManyChange(columnId, option, index, newValue) {\r\n this.auxiliaryFormState[index][columnId][option.value] = newValue;\r\n\r\n this.syncManyToManyHiddenFormField(columnId, option, index);\r\n\r\n }\r\n\r\n syncManyToManyHiddenFormField(columnId, option, index) {\r\n\r\n let values = [];\r\n\r\n let options = this.columnData[columnId].options;\r\n\r\n let selectedValues = [];\r\n\r\n options.forEach((opt) => {\r\n let isSelected = this.auxiliaryFormState[index][columnId][opt.value];\r\n\r\n if(isSelected) {\r\n selectedValues.push(opt.value);\r\n }\r\n });\r\n\r\n let csvString = selectedValues.join(',');\r\n\r\n let row = this.injectionFormRows.at(index);\r\n\r\n let control = row.get(columnId);\r\n\r\n control.setValue(csvString);\r\n }\r\n\r\n syncManyToManyOptions(columnId, index) {\r\n let row = this.injectionFormRows.controls[index];\r\n\r\n let control = row.get(columnId);\r\n\r\n let curVal = control.value;\r\n\r\n let parts = [];\r\n //curval can be either a string or an array\r\n //In the case of a many to many, we need to substitute an empty string\r\n if (curVal) {\r\n if (typeof curVal == 'string') {\r\n parts = curVal.split(',');\r\n } else if (curVal.constructor === Array) {\r\n parts = curVal;\r\n }\r\n }\r\n\r\n\r\n let optionValKeys = Object.keys(this.auxiliaryFormState[index][columnId]);\r\n\r\n for(var i=0; i < optionValKeys.length; i++) {\r\n var valKey = optionValKeys[i];\r\n\r\n if(parts.indexOf(valKey) >= 0) {\r\n this.auxiliaryFormState[index][columnId][valKey] = true;\r\n }\r\n else {\r\n this.auxiliaryFormState[index][columnId][valKey] = false;\r\n }\r\n }\r\n }\r\n\r\n //Returns the contents of the form, with some processing to distill the many to many fields into arrays, as opposed to csv strings\r\n getValues() {\r\n let values = this.injectionForm.value;\r\n\r\n let newValues = {\r\n InjectionRows: []\r\n };\r\n\r\n for(let i=0; i < values.InjectionRows.length; i++) {\r\n let row = values.InjectionRows[i];\r\n let keys = Object.keys(row);\r\n\r\n let newRow = {};\r\n\r\n for(let j = 0; j < keys.length; j++) {\r\n let key = keys[j];\r\n\r\n if(key != \"InjectionDate\"){\r\n let colData = this.columnData[key];\r\n\r\n \r\n\r\n let value = row[key];\r\n\r\n if(colData != null && colData.type == \"manytomany\"){\r\n newRow[key] = value.split(',');\r\n }\r\n else {\r\n newRow[key] = value;\r\n }\r\n }\r\n }\r\n\r\n newValues.InjectionRows.push(newRow);\r\n }\r\n\r\n return newValues;\r\n }\r\n\r\n patchValues(injection, index) {\r\n this.injectionForm.controls.InjectionRows.controls[index].patchValue(injection);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subject, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { WellDetailsModel } from './_models/well-details-model';\r\nimport { AdminWellSearch } from './_models/admin-well-search';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { EditFormationsDialogComponent } from './edit-formations-dialog/edit-formations-dialog.component';\r\nimport { Formation } from './_models/formation';\r\nimport { APIOperationResult } from './_models/apioperation-result';\r\nimport { MessageDialogComponent } from './message-dialog/message-dialog.component';\r\n\r\nimport { FormationsForWellResponseModel } from './_models/formations-for-well-response-model';\r\nimport { FormationsForWellRequestModel} from './_models/formations-for-well-request-model';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserWellsService {\r\n\r\n public isWorking: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n public result: Subject> = new Subject>();\r\n\r\n public detailsWell: Subject = new Subject();\r\n\r\n public foundUicWell: BehaviorSubject = new BehaviorSubject(null);\r\n\r\n public updateFormationsIsWorking: BehaviorSubject = new BehaviorSubject(false);\r\n\r\n constructor(protected httpClient: HttpClient,\r\n private dialog: MatDialog\r\n ) {\r\n }\r\n\r\n\r\n public handleError(errorResponse: HttpErrorResponse) {\r\n var ret: string = \"An error occurred while attempting to communicate with the server.\";\r\n\r\n return throwError(ret);\r\n }\r\n\r\n public GetWells() {\r\n\r\n var _this = this;\r\n this.isWorking.next(true);\r\n\r\n var inputParams = {};\r\n\r\n this.httpClient.get(\"api/well\", inputParams).pipe(catchError(this.handleError)).subscribe((result: any) => {\r\n\r\n this.isWorking.next(false);\r\n\r\n this.result.next(result);\r\n });\r\n }\r\n\r\n public onWellDataUpdate(): Observable> {\r\n return this.result.asObservable();\r\n }\r\n\r\n public onDetailsWellUpdate(): Observable {\r\n return this.detailsWell.asObservable();\r\n }\r\n\r\n public LoadDetailsWell(wellId: number) {\r\n this.isWorking.next(true);\r\n\r\n var inputParams = {};\r\n\r\n if (wellId != null) {\r\n\r\n this.httpClient.get(\"api/well/\" + wellId, inputParams).pipe(catchError(this.handleError)).subscribe((result: any) => {\r\n\r\n this.isWorking.next(false);\r\n\r\n this.detailsWell.next(result);\r\n });\r\n }\r\n else {\r\n this.detailsWell.next(null);\r\n }\r\n }\r\n\r\n public LoadDetailsWellByUIC(uic: string) {\r\n this.isWorking.next(true); \r\n\r\n var inputParams = {};\r\n\r\n this.httpClient.get(\"api/well/uic/\" + uic, inputParams).pipe(catchError(this.handleError)).subscribe((result: any) => {\r\n\r\n this.isWorking.next(false);\r\n\r\n this.detailsWell.next(result);\r\n });\r\n }\r\n\r\n public LoadDetailsWellByAPINumber(apiNumber: string) {\r\n this.isWorking.next(true);\r\n\r\n var inputParams = {};\r\n\r\n this.httpClient.get(\"api/well/apinumber/\" + apiNumber, inputParams).pipe(catchError(this.handleError)).subscribe((result: any) => {\r\n\r\n this.isWorking.next(false);\r\n\r\n this.detailsWell.next(result);\r\n });\r\n }\r\n\r\n public GetWellsAdminSearch(searchRequest: AdminWellSearch) {\r\n\r\n this.isWorking.next(true);\r\n\r\n this.httpClient.post(\"api/well/adminsearch\", searchRequest).pipe(catchError(this.handleError)).subscribe((result: any) => {\r\n\r\n this.isWorking.next(false);\r\n\r\n this.result.next(result);\r\n });\r\n }\r\n\r\n public requestEditFormations(well: WellDetailsModel) {\r\n\r\n this.dialog.open(EditFormationsDialogComponent, {\r\n data: {\r\n well: well\r\n }\r\n }).afterClosed().subscribe((formations) => {\r\n //Refresh the well?\r\n\r\n this.updateWellFormations(well, formations).then((result: APIOperationResult) => {\r\n if (result.Success) {\r\n this.LoadDetailsWell(well.Id);\r\n }\r\n else {\r\n\r\n var message = \"\";\r\n\r\n for (var i = 0; i < result.Reasons.length; i++) {\r\n message = message + result.Reasons[i] + \"\\r\\n\";\r\n }\r\n\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"An error occurred while trying to save the formation data\",\r\n message: message\r\n }\r\n });\r\n }\r\n },\r\n () => {\r\n //Do nothing?\r\n });\r\n });\r\n }\r\n\r\n public updateWellFormations(well: WellDetailsModel, formations: Array) {\r\n var prom = new Promise((resolve, reject) => {\r\n\r\n if (formations != null) {\r\n var url = \"api/well/\" + well.Id + \"/updateFormations\";\r\n\r\n this.httpClient.post(url, formations\r\n ).pipe(catchError(this.handleError))\r\n .subscribe((result) => {\r\n\r\n if (result != null) {\r\n resolve(result);\r\n }\r\n else {\r\n reject();\r\n }\r\n });\r\n }\r\n else {\r\n reject();\r\n }\r\n });\r\n\r\n return prom;\r\n }\r\n\r\n //Retreives the set of formations that are associated with the wells with the specified IDs.\r\n public getFormationsForWellIds(formationsForWellRequestModel: FormationsForWellRequestModel) {\r\n var prom = new Promise((resolve, reject) => {\r\n var url = \"api/well/formationsForWellIds\";\r\n\r\n this.httpClient.post(url, formationsForWellRequestModel\r\n ).pipe(catchError(this.handleError))\r\n .subscribe((result) => {\r\n\r\n if (result != null) {\r\n resolve(result);\r\n }\r\n else {\r\n reject();\r\n }\r\n });\r\n });\r\n\r\n return prom;\r\n }\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\n\nimport { APIOperationResult } from '../_models/apioperation-result';\n@Component({\n selector: 'app-validation-failure-reasons-display',\n templateUrl: './validation-failure-reasons-display.component.html',\n styleUrls: ['./validation-failure-reasons-display.component.css']\n})\nexport class ValidationFailureReasonsDisplayComponent implements OnInit {\n\n @Input() public apiResult: APIOperationResult;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-welcome-dialog',\n templateUrl: './welcome-dialog.component.html',\n styleUrls: ['./welcome-dialog.component.css']\n})\nexport class WelcomeDialogComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { EditFormationsDialogComponent } from '../edit-formations-dialog/edit-formations-dialog.component';\r\nimport { UserWellsService } from '../user-wells.service';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\n\r\n@Component({\r\n selector: 'app-well-details-display',\r\n templateUrl: './well-details-display.component.html',\r\n styleUrls: ['./well-details-display.component.css']\r\n})\r\nexport class WellDetailsDisplayComponent implements OnInit {\r\n\r\n @Input() well: WellDetailsModel;\r\n\r\n constructor(private dialog: MatDialog, private userWellsService: UserWellsService) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n editFormations() {\r\n this.userWellsService.requestEditFormations(this.well);\r\n }\r\n\r\n}\r\n","import { Component, OnInit, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { UserWellsService } from '../user-wells.service';\r\nimport { InjectionDataRecord } from '../_models/injection-data-record';\r\nimport { InjectionPressureDataRecord } from '../_models/injection-pressure-data-record';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatSort, Sort, SortDirection } from '@angular/material/sort';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { InjectionService } from '../_services/injection.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { InjectionRecordEditorComponent } from '../injection-record-editor/injection-record-editor.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { NgDynamicBreadcrumbService } from 'ng-dynamic-breadcrumb';\r\nimport { ExportManagerService } from '../_services/export-manager.service';\r\nimport { ExportInjectionPressureManagerService } from '../_services/export-injection-pressure-manager.service';\r\nimport { ExportOption } from '../_models/export-option';\r\nimport { ExportRequest } from '../_models/export-request';\r\nimport { ExportDateRangeSelectorComponent } from '../export-date-range-selector/export-date-range-selector.component';\r\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\r\nimport { MessageDialogComponent } from '../message-dialog/message-dialog.component';\r\nimport { EditFormationsDialogComponent } from '../edit-formations-dialog/edit-formations-dialog.component';\r\nimport { WellDetailsDisplayComponent } from '../well-details-display/well-details-display.component';\r\nimport { DeleteInjectionDialogComponent } from '../delete-injection-dialog/delete-injection-dialog.component';\r\nimport { DeleteDateRangeModel } from '../_models/delete-date-range-model';\r\nimport { BHPService } from '../_services/bhp.service';\r\n\r\n@Component({\r\n selector: 'app-well-details',\r\n templateUrl: './well-details.component.html',\r\n styleUrls: ['./well-details.component.css']\r\n})\r\nexport class WellDetailsComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n public wellId: number;\r\n public wellDetails: WellDetailsModel;\r\n public injectionDataSource: MatTableDataSource;\r\n public bhpDataSource: MatTableDataSource;\r\n\r\n public detailsWellSubscription: Subscription;\r\n public currentInjectionsSubscription: Subscription;\r\n public currentInjectionPressuresSubscription: Subscription;\r\n\r\n public years: Array;\r\n public year: number;\r\n\r\n public monthly: string = \"monthly\";\r\n\r\n public minYear = 2015;\r\n public maxYear = 2021;\r\n\r\n public injectionDisplayedColumns: string[] = ['edit', 'InjectionDate', 'InjectionPressureAveragePsig', 'InjectionPressureMaxPsig', 'VolumeInjectedBbl', 'TotalGasVolumeMcf', 'AnnulusPressureNumReadings', 'AnnulusPressureMinPsig', 'AnnulusPressureMaxPsig', 'MaxDayInjLiqRate', 'DateRowAdded'];\r\n public bhpDisplayedColumns: string[] = ['edit', 'MeasurementDate', 'ShutinBHPDaily', 'ShutinBHPQuarterlyCalc', 'ShutinBHPQuarterlyMeas', 'TvdDepBHPSensor', 'MeaDayInjLiqDens', 'AveDayMeasBhp', 'MaxDayMeasBhp', 'AveDayEstBhp', 'MaxDayEstBhp', 'ShutinTimeForStaticPress', 'PressureGradient', 'DateRowAdded'];\r\n\r\n @ViewChild(MatSort) injectionSort;\r\n @ViewChild(MatPaginator) paginator;\r\n @ViewChild(WellDetailsDisplayComponent) wellDetailsDisplay;\r\n\r\n constructor(private actRoute: ActivatedRoute,\r\n private userWellsService: UserWellsService,\r\n private injectionService: InjectionService,\r\n private bhpService: BHPService,\r\n private dialog: MatDialog,\r\n private breadcrumbService: NgDynamicBreadcrumbService,\r\n public exportManagerService: ExportManagerService,\r\n public exportInjectionPressureManagerService: ExportInjectionPressureManagerService\r\n ) {\r\n this.wellId = this.actRoute.snapshot.params.wellId;\r\n\r\n var now = new Date();\r\n\r\n this.maxYear = now.getFullYear() + 1;\r\n this.years = new Array();\r\n\r\n for (let i = this.maxYear; i >= this.minYear; i--) {\r\n this.years.push(i);\r\n }\r\n\r\n let initInjectionRecords = new Array();\r\n let initBHPRecords = new Array();\r\n\r\n this.injectionDataSource = new MatTableDataSource(initInjectionRecords);\r\n this.bhpDataSource = new MatTableDataSource(initBHPRecords);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.detailsWellSubscription = this.userWellsService.detailsWell.subscribe((newDetailsWell: WellDetailsModel) => {\r\n this.wellDetails = newDetailsWell;\r\n\r\n this.year = new Date().getFullYear();\r\n this.monthly = \"monthly\";\r\n\r\n this.refreshInjectionRecords();\r\n this.refreshInjectionPressureRecords();\r\n\r\n var breadcrumbdata = {\r\n Uicnumber: this.wellDetails.Uicnumber.toString()\r\n };\r\n\r\n this.breadcrumbService.updateBreadcrumbLabels(breadcrumbdata);\r\n });\r\n\r\n this.userWellsService.LoadDetailsWell(this.wellId);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.injectionDataSource.paginator = this.paginator;\r\n this.injectionDataSource.sort = this.injectionSort;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.detailsWellSubscription.unsubscribe();\r\n this.injectionService.ClearCurrentRecords();\r\n }\r\n\r\n handleEditInjectionRowClick(injectionDataRecord: InjectionDataRecord) {\r\n var dialogRef = this.dialog.open(InjectionRecordEditorComponent, {\r\n data: {\r\n injRec: injectionDataRecord\r\n }\r\n });\r\n }\r\n\r\n refreshInjectionRecords(): void {\r\n\r\n if(this.currentInjectionsSubscription == null) {\r\n this.currentInjectionsSubscription = this.injectionService.currentRecords.subscribe((injectionRecords: Array) => {\r\n if (injectionRecords == null) {\r\n injectionRecords = new Array();\r\n }\r\n\r\n this.injectionDataSource.data = injectionRecords;\r\n });\r\n }\r\n\r\n this.injectionService.GetInjectionData(this.wellId);\r\n }\r\n\r\n refreshInjectionPressureRecords(): void {\r\n\r\n if(this.currentInjectionPressuresSubscription == null) {\r\n this.currentInjectionPressuresSubscription = this.bhpService.currentRecords.subscribe((injectionPressureRecords: Array) => {\r\n if (injectionPressureRecords == null) {\r\n injectionPressureRecords = new Array();\r\n }\r\n\r\n this.bhpDataSource.data = injectionPressureRecords;\r\n });\r\n }\r\n \r\n this.bhpService.GetInjectionPressureData(this.wellId);\r\n }\r\n\r\n export(option: ExportOption) {\r\n\r\n var today = new Date();\r\n var aYearAgo = new Date(today);\r\n aYearAgo.setFullYear(aYearAgo.getFullYear() - 1);\r\n\r\n //Theoretically, we'd need to \r\n var req = new ExportRequest();\r\n req.BeginYear = null;\r\n req.BeginMonth = null;\r\n req.EndYear = null;\r\n req.EndMonth = null;\r\n req.WellIds = new Array(this.wellId);\r\n req.Format = option.Key;\r\n\r\n this.dialog.open(ExportDateRangeSelectorComponent, {\r\n }).afterClosed().subscribe((result: any) => {\r\n\r\n if (result != undefined) {\r\n\r\n req.BeginYear = result.BeginDate.getFullYear();\r\n req.BeginMonth = result.BeginDate.getMonth() + 1;\r\n req.EndYear = result.EndDate.getFullYear();\r\n req.EndMonth = result.EndDate.getMonth() + 1;\r\n\r\n this.exportManagerService.export(req, true).then((result) => {\r\n var q = 0;\r\n },\r\n (err) => {\r\n var q = 0;\r\n });\r\n }\r\n });\r\n }\r\n\r\n exportBHP() {\r\n\r\n var today = new Date();\r\n var aYearAgo = new Date(today);\r\n aYearAgo.setFullYear(aYearAgo.getFullYear() - 1);\r\n\r\n //Theoretically, we'd need to \r\n var req = new ExportRequest();\r\n req.BeginYear = null;\r\n req.BeginMonth = null;\r\n req.EndYear = null;\r\n req.EndMonth = null;\r\n req.WellIds = new Array(this.wellId);\r\n req.Format = null;\r\n\r\n this.dialog.open(ExportDateRangeSelectorComponent, {\r\n }).afterClosed().subscribe((result: any) => {\r\n\r\n if (result != undefined) {\r\n\r\n req.BeginYear = result.BeginDate.getFullYear();\r\n req.BeginMonth = result.BeginDate.getMonth() + 1;\r\n req.EndYear = result.EndDate.getFullYear();\r\n req.EndMonth = result.EndDate.getMonth() + 1;\r\n\r\n this.exportInjectionPressureManagerService.export(req, true).then((result) => {\r\n var q = 0;\r\n },\r\n (err) => {\r\n var q = 0;\r\n });\r\n }\r\n });\r\n }\r\n\r\n deleteInjectionDateRange() {\r\n this.dialog.open(DeleteInjectionDialogComponent, {\r\n\r\n }).afterClosed().subscribe((result: any) => {\r\n\r\n var beginDate = result.beginDate;\r\n var endDate = result.endDate;\r\n\r\n var sBeginDate = beginDate.toLocaleDateString();\r\n var sEndDate = endDate.toLocaleDateString();\r\n\r\n this.dialog.open(ConfirmDialogComponent, {\r\n data: {\r\n title: \"Are you sure?\",\r\n message: \"You are about to delete the injection data for this well (UIC number \" + this.wellDetails.Uicnumber + \") for the period of \" + sBeginDate + \" through \" + sEndDate + \". This cannot be undone, and you will likely need to resubmit these data. Are you sure you wish to proceed?\"\r\n }\r\n }).afterClosed().subscribe((result) => {\r\n if (result) {\r\n\r\n let deleteRangeArgs = new DeleteDateRangeModel();\r\n\r\n let beginYear = beginDate.getFullYear();\r\n let beginMonth = beginDate.getMonth() + 1;\r\n let beginDay = beginDate.getDate();\r\n\r\n let endYear = endDate.getFullYear();\r\n let endMonth = endDate.getMonth() + 1;\r\n let endDay = endDate.getDate();\r\n\r\n deleteRangeArgs.beginYear = beginYear;\r\n deleteRangeArgs.beginMonth = beginMonth;\r\n deleteRangeArgs.beginDay = beginDay;\r\n\r\n deleteRangeArgs.endYear = endYear;\r\n deleteRangeArgs.endMonth = endMonth;\r\n deleteRangeArgs.endDay = endDay;\r\n\r\n deleteRangeArgs.wellId = this.wellDetails.Id;\r\n\r\n this.injectionService.DeleteInjectionDateRange(deleteRangeArgs).then(() => {\r\n //Refresh the table?\r\n\r\n this.refreshInjectionRecords();\r\n },\r\n (err) => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Error\",\r\n message: err\r\n }\r\n });\r\n });\r\n }\r\n });\r\n })\r\n }\r\n\r\n deleteInjectionPressureDateRange() {\r\n this.dialog.open(DeleteInjectionDialogComponent, {\r\n }).afterClosed().subscribe((result: any) => {\r\n\r\n var beginDate = result.beginDate;\r\n var endDate = result.endDate;\r\n\r\n var sBeginDate = beginDate.toLocaleDateString();\r\n var sEndDate = endDate.toLocaleDateString();\r\n\r\n this.dialog.open(ConfirmDialogComponent, {\r\n data: {\r\n title: \"Are you sure?\",\r\n message: \"You are about to delete the injection pressure data for this well (UIC number \" + this.wellDetails.Uicnumber + \") for the period of \" + sBeginDate + \" through \" + sEndDate + \". This cannot be undone, and you will likely need to resubmit these data. Are you sure you wish to proceed?\"\r\n }\r\n }).afterClosed().subscribe((result) => {\r\n if (result) {\r\n\r\n var deleteRangeArgs = new DeleteDateRangeModel();\r\n\r\n let beginYear = beginDate.getFullYear();\r\n let beginMonth = beginDate.getMonth() + 1;\r\n let beginDay = beginDate.getDate();\r\n\r\n let endYear = endDate.getFullYear();\r\n let endMonth = endDate.getMonth() + 1;\r\n let endDay = endDate.getDate();\r\n\r\n deleteRangeArgs.beginYear = beginYear;\r\n deleteRangeArgs.beginMonth = beginMonth;\r\n deleteRangeArgs.beginDay = beginDay;\r\n\r\n deleteRangeArgs.endYear = endYear;\r\n deleteRangeArgs.endMonth = endMonth;\r\n deleteRangeArgs.endDay = endDay;\r\n\r\n deleteRangeArgs.wellId = this.wellDetails.Id;\r\n\r\n this.bhpService.DeleteDateRange(deleteRangeArgs).then(() => {\r\n //Refresh the table?\r\n\r\n this.refreshInjectionPressureRecords();\r\n },\r\n (err) => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n title: \"Error\",\r\n message: err\r\n }\r\n });\r\n });\r\n }\r\n });\r\n })\r\n }\r\n\r\n deleteInjectionRecord(record: InjectionDataRecord) {\r\n\r\n var startDateString = new Date(record.InjectionDate).toDateString();\r\n var endDateString = new Date(record.InjectionEndDate).toDateString();\r\n\r\n this.dialog.open(ConfirmDialogComponent, {\r\n data: {\r\n title: \"Confirm Deletion\",\r\n message: \"Are you sure you wish to delete the injection record for \" + startDateString + \" through \" + endDateString + \"?\"\r\n }\r\n }).afterClosed().subscribe((result) => {\r\n if (result) {\r\n this.injectionService.deleteRecord(record).then((result) => {\r\n var ind = this.injectionDataSource.data.indexOf(record);\r\n\r\n //Remove that record from the displayed data\r\n this.injectionDataSource.data.splice(ind, 1);\r\n this.injectionDataSource._updateChangeSubscription(); //Refresh the table\r\n },\r\n (err) => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n message: \"An error occurred while trying to delete the injection record.\"\r\n }\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n deleteInjectionPressureRecord(record: InjectionPressureDataRecord) {\r\n let dateString = new Date(record.MeasurementDate).toDateString();\r\n\r\n this.dialog.open(ConfirmDialogComponent, {\r\n data: {\r\n title: \"Confirm Deletion\",\r\n message: \"Are you sure you wish to delete the injection pressure record for \" + dateString + \"?\"\r\n }\r\n }).afterClosed().subscribe((result) => {\r\n if (result) {\r\n this.bhpService.deleteRecord(record).then((result) => {\r\n var ind = this.bhpDataSource.data.indexOf(record);\r\n\r\n //Remove that record from the displayed data\r\n this.bhpDataSource.data.splice(ind, 1);\r\n this.bhpDataSource._updateChangeSubscription(); //Refresh the table\r\n },\r\n (err) => {\r\n this.dialog.open(MessageDialogComponent, {\r\n data: {\r\n message: \"An error occurred while trying to delete the injection pressure record.\"\r\n }\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n editFormations() {\r\n this.userWellsService.requestEditFormations(this.wellDetails);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { UserWellsService } from '../user-wells.service';\r\nimport { WellDetailsModel } from '../_models/well-details-model';\r\nimport { AdminWellSearch } from '../_models/admin-well-search';\r\nimport { WellDetailsDisplayComponent } from '../well-details-display/well-details-display.component';\r\n\r\n\r\n@Component({\r\n selector: 'app-well-lookup',\r\n templateUrl: './well-lookup.component.html',\r\n styleUrls: ['./well-lookup.component.css']\r\n})\r\nexport class WellLookupComponent implements OnInit {\r\n\r\n wellSearchForm: FormGroup\r\n\r\n wellRecords: WellDetailsModel[];\r\n errorStatus: boolean;\r\n\r\n detailsWellSubscription: Subscription;\r\n detailsWellErrorStatusSubscription: Subscription;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n public userWellService: UserWellsService\r\n ) {\r\n\r\n this.detailsWellSubscription = this.userWellService.result.subscribe((x) => {\r\n this.wellRecords = x;\r\n });\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.wellSearchForm = this.formBuilder.group({\r\n wellId: [''],\r\n uicNumber: [''],\r\n apiNumber: [''],\r\n leaseName: [''],\r\n wellNumber: [''],\r\n operatorName: [''],\r\n operatorp5Number: ['']\r\n });\r\n }\r\n\r\n onSubmit() {\r\n let searchRequest: AdminWellSearch = {\r\n WellId: this.f.wellId.value,\r\n UicNumber: this.f.uicNumber.value,\r\n ApiNumber: this.f.apiNumber.value,\r\n LeaseName: this.f.leaseName.value,\r\n WellNumber: this.f.wellNumber.value,\r\n OperatorName: this.f.operatorName.value,\r\n Operatorp5Number: this.f.operatorp5Number.value,\r\n }\r\n this.userWellService.GetWellsAdminSearch(searchRequest);\r\n }\r\n get f() { return this.wellSearchForm.controls; }\r\n\r\n ngOnDestroy(): void {\r\n if (this.detailsWellSubscription != null) {\r\n this.detailsWellSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n clearRecords() {\r\n this.wellRecords = null;\r\n this.f.wellId.setValue('');\r\n this.f.uicNumber.setValue('');\r\n this.f.apiNumber.setValue('');\r\n this.f.leaseName.setValue('');\r\n this.f.wellNumber.setValue('');\r\n this.f.operatorName.setValue('');\r\n this.f.operatorp5Number.setValue('');\r\n\r\n }\r\n\r\n}\r\n","// This file can be replaced during build by using the `fileReplacements` array.\r\n// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.\r\n// The list of file replacements can be found in `angular.json`.\r\n\r\nexport const environment = {\r\n production: false,\r\n apiUrl: 'api'\r\n};\r\n\r\n/*\r\n * In development mode, to ignore zone related error stack frames such as\r\n * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can\r\n * import the following file, but please comment it out in production mode\r\n * because it will have performance impact when throw error\r\n */\r\n// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nexport function getBaseUrl() {\r\n return document.getElementsByTagName('base')[0].href;\r\n}\r\n\r\nconst providers = [\r\n { provide: 'BASE_URL', useFactory: getBaseUrl, deps: [] }\r\n];\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic(providers).bootstrapModule(AppModule)\r\n .catch(err => console.log(err));\r\n","export default \"
\\r\\n \\r\\n \\r\\n Select Period and Method\\r\\n\\r\\n
\\r\\n
\\r\\n Which measurement method are you using?\\r\\n
\\r\\n Method 1 - Calculated BHP Method (Shut in for 24 hrs.)\\r\\n
\\r\\n
\\r\\n Method 2 - Dip-in BHP Measurement Method (Shut in for 24 hrs.)\\r\\n
\\r\\n
\\r\\n Method 3 - Permanent BHP Probe Method\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n Populate with last measurement data?\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n Enter Bottom Hole Pressure Data\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n Submit\\r\\n\\r\\n

The following data will be submitted. Please review the table below, and when you are sure that no accuracy errors are present, and no validation errors are found, click on the submit button at the bottom of this page to finish the process.

\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n \\r\\n Select Period\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Populate with last injection data?\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Enter Injection Data\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n Enter Injection Interval Data\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n Enter Fluid Composition Data\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n Review and Submit\\r\\n \\r\\n\\r\\n

The following data will be submitted. Please review the table below, and when you are sure that no accuracy errors are present, and no validation errors are found, click on the submit button at the bottom of this page to finish the process.

\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n \\r\\n Select Period\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Populate with last injection data?\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Enter Injection Data\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n Enter Injection Interval Data\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n Enter Fluid Composition Data\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n Review and Submit\\r\\n \\r\\n\\r\\n

The following data will be submitted. Please review the table below, and when you are sure that no accuracy errors are present, and no validation errors are found, click on the submit button at the bottom of this page to finish the process.

\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Submit\\r\\n \\r\\n
\\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n Add New User\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n First Name\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Last Name\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Email Address\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n Password\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n Phone Number\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ error }}\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n \\r\\n
\\r\\n Users\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n User Id\\r\\n {{element.Id}}\\r\\n \\r\\n \\r\\n \\r\\n {{element.FirstName}}\\r\\n \\r\\n \\r\\n \\r\\n {{element.LastName}}\\r\\n \\r\\n \\r\\n \\r\\n {{element.Email}}\\r\\n Is Approved\\r\\n {{element.IsApproved}}\\r\\n Is Denied\\r\\n {{ element.IsDenied }}\\r\\n Role\\r\\n {{ element.Role }}\\r\\n \\r\\n Edit\\r\\n
\\r\\n No User information available\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Mass Email\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Return Address\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Subject\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Email Body\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"\\r\\n Edit User\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n Email Address\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n First Name\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Last Name\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Phone\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n Is Confirmed?\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n Is Approved?\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n Is Denied?\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n Role\\r\\n \\r\\n Admin\\r\\n User\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n Resend Emails\\r\\n \\r\\n Use the options below to re-send the emails to the user, in case they don't receive them.\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n Operators\\r\\n \\r\\n \\r\\n \\r\\n

{{ oprjct.OperatorName }}

\\r\\n

Is Approved: {{ oprjct.IsApproved }} Is Approver: {{ oprjct.IsApproved }}

\\r\\n\\r\\n \\r\\n thumb_up\\r\\n \\r\\n\\r\\n \\r\\n thumb_down\\r\\n \\r\\n\\r\\n \\r\\n add_moderator\\r\\n \\r\\n\\r\\n \\r\\n remove_moderator\\r\\n \\r\\n\\r\\n \\r\\n delete\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n REST API Documentation\\r\\n

The TexNet Injection Data Capture System, in addition to its human-readable user interface, features a RESTful API for submitting and requesting data. This page documents the available functions of the API.

\\r\\n

While it is possible to make use of some REST API functions using a browser, the intended means of utilizing the REST API is via the HTTP client library in a scripting or programming language, such as Python. Examples on this page are written in Python, but the API will support any programming language with a proper HTTP client implementation. The \\\"requests\\\" Python module is used here for simplicity as well. It can be installed using pip if it is not present in your environment.

\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n Exporting Data\\r\\n API Path: ~/api/Export\\r\\n HTTP Method: POST\\r\\n

For most users, the most important API function is the ability to export injection data for use in other applications. This is done using the Export function.

\\r\\n

The response from the API is the same .csv file that is generated when clicking on the export button on the front page.

\\r\\n\\r\\n Example\\r\\n
\\r\\n    \\r\\n      \\r\\n      \\r\\n    
\\r\\n
\\r\\n\\r\\n \\r\\n Submitting Injection Volume Data\\r\\n API Path: ~/api/Injection/Submit\\r\\n HTTP Method: POST\\r\\n

Some users may wish to submit data to the API directly, without going through the human readable user interface. The following code sample describes the process.

\\r\\n

The response from the API is a JSON object containing a property \\\"Success\\\" which will be true in the case of a successful submission, or false in the case of a failure. The object also contains an array of strings \\\"Reasons,\\\" which describe the reason(s) for the failure.

\\r\\n

Additional example code is provided to illustrate obtaining the well and formation IDs, both of which are required for submission. Note that the well ID is NOT the same as the UIC number or API number.

\\r\\n\\r\\n Example\\r\\n
\\r\\n    \\r\\n      \\r\\n      \\r\\n    
\\r\\n
\\r\\n\\r\\n \\r\\n Deleting Injection Volume Records\\r\\n API Path: ~/api/Injection/[injectionId]\\r\\n HTTP Method: DELETE\\r\\n

The API will not allow submission of overlapping injection entries for any well. If you need to correct one, you will need to delete the existing record and submit a fresh one. This example illustrates the process for deleting a record with the given injection Id value. Injection records should only be deleted for the purpose of correcting incorrect values.

\\r\\n

A response code of 200 (Ok) indicates a successful deletion. Any other response code indicates a failure.

\\r\\n

Additional code is provided to illustrate fetching the injection records for a given well. This information contains the injection Id value for each record, which is required in order to delete one.

\\r\\n\\r\\n Example\\r\\n
\\r\\n    \\r\\n      \\r\\n      \\r\\n    
\\r\\n
\\r\\n\\r\\n \\r\\n Submitting Injection Pressure Records\\r\\n API Path ~/api/InjectionPressure/Submit\\r\\n HTTP Method POST\\r\\n

The following code describes the process for submitting injection pressure records to the API, bypassing the need to manually interact with the GUI.

\\r\\n

The response from the API is a JSON object containing a property \\\"Success\\\" which will be true in the case of a successful submission, or false in the case of a failure. The object also contains an array of strings \\\"Reasons,\\\" which describe the reason(s) for the failure.

\\r\\n

Additional example code is provided to illustrate obtaining the well ID, which is required for submission. Note that the well ID is NOT the same as the UIC number or API number. The well ID does not change, and thus does not need to be fetched for every submission. Once you know it, you do not need to keep requesting it.1

\\r\\n
\\r\\n    \\r\\n\\r\\n      \\r\\n    
\\r\\n
\\r\\n\\r\\n \\r\\n Deleting Injection Pressure Records\\r\\n API Path: ~/api/InjectionPressure/[injectionPressureId]\\r\\n HTTP Method: DELETE\\r\\n

The API will not allow submission of overlapping injection pressure entries for any well. If you need to correct one, you will need to delete the existing record and submit a fresh one. This example illustrates the process for deleting a record with the given injection pressure Id value. Injection pressure records should only be deleted for the purpose of correcting incorrect values.

\\r\\n

A response code of 200 (Ok) indicates a successful deletion. Any other response code indicates a failure.

\\r\\n

Additional code is provided to illustrate fetching the injection records for a given well. This information contains the injection Id value for each record, which is required in order to delete one.

\\r\\n\\r\\n Example\\r\\n
\\r\\n    \\r\\n    \\r\\n    \\r\\n  
\\r\\n
\\r\\n
\\r\\n\";","export default \"

Error

\\r\\n\\r\\n

The following error{{apiResult.Reasons.length > 1 ? 's' : ''}} occurred while attempting the requested action

\\r\\n
    \\r\\n
  • {{ reason }}
  • \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n\";","export default \"\\r\\n \\r\\n \\r\\n\\r\\n\";","export default \"
\\r\\n \\r\\n User Approval\\r\\n \\r\\n
\\r\\n

Please wait while we process the account...

\\r\\n \\r\\n
\\r\\n
\\r\\n

The account has been approved, and an email has been dispatched to notify the user. You may now close this window or return to the home page.

\\r\\n Click here to return to the login page\\r\\n
\\r\\n\\r\\n
\\r\\n

The account has been denied. You may now close this window or return to the home page.

\\r\\n Click here to return to the login page\\r\\n
\\r\\n\\r\\n
\\r\\n

Uh oh! Something went wrong while trying to approve your account. Please contact the adminstrators.

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n {{ operator.operatorApprovedUsersModel.OperatorName }}\\r\\n P-5: {{ operator.operatorApprovedUsersModel.OperatorNumber }}\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n User Id\\r\\n {{element.Id}}\\r\\n First Name\\r\\n {{element.FirstName}}\\r\\n Last Name\\r\\n {{element.LastName}}\\r\\n Email\\r\\n {{element.Email}}\\r\\n Is Approved\\r\\n {{element.IsApproved}}\\r\\n Is Denied\\r\\n {{ element.IsDenied }}\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n No users registered\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"

base-date-range-selector works!

\\r\\n\";","export default \"

bhp-data-grid works!

\\n\";","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n Create\\r\\n \\r\\n
\\r\\n\";","export default \"
\\r\\n
\\r\\n Which measurement method are you using?\\r\\n
\\r\\n Method 1 - Calculated BHP Method (Shut in for 24 hrs.)\\r\\n
\\r\\n
\\r\\n Method 2 - Dip-in BHP Measurement Method (Shut in for 24 hrs.)\\r\\n
\\r\\n
\\r\\n Method 3 - Permanent BHP Probe Method\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n Populate with last injection data?\\r\\n \\r\\n
\\r\\n
\\r\\n\";","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
Date{{ element.MeasurementDate | date:'yyyy/MM/dd' : 'UTC' }}\\r\\n Shut-In Bottom Hole Pressure after 24 hours - Quarterly (Method 1 (NTO) / Calc)\\r\\n {{ element.ShutinBHPQuarterlyCalc }}\\r\\n Shut-In Bottom Hole Pressure after 24 hours - Quarterly (Method 2 (NTO) / Meas)\\r\\n {{ element.ShutinBHPQuarterlyMeas }}\\r\\n Shut-In Bottom Hole Pressure - Daily (Method 3 (NTO) / Meas)\\r\\n {{ element.ShutinBHPDaily }}\\r\\n Pressure calculated to top of completed interval TVD\\r\\n {{ element.TvdDepBHPSensor }}\\r\\n Liquid Density (Lbs./Gal)\\r\\n {{ element.MeaDayInjLiqDens }}\\r\\n MEAS BHP AVE INJ (PSIG)\\r\\n {{ element.AveDayMeasBhp }}\\r\\n MEAS BHP MAX INJ (PSIG)\\r\\n {{ element.MaxDayMeasBhp }}\\r\\n CALC BHP AVE INJ (PSIG)\\r\\n {{ element.AveDayEstBhp }}\\r\\n CALC BHP MAX INJ (PSIG)\\r\\n {{ element.MaxDayEstBhp }}\\r\\n STATIC P SHUTIN TIME (Hrs)\\r\\n {{ element.ShutinTimeForStaticPress }}
\\r\\n\\r\\n\";","export default \"
\\r\\n
\\r\\n

{{title}}

\\r\\n
\\r\\n
\\r\\n Relevant Wells: {{relevantWells}}\\r\\n Available Records: {{availableRecords}}\\r\\n
\\r\\n
\\r\\n exit_to_app\\r\\n
\\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"

Details for UIC Number {{ wellGraphic.attributes.UICNumber }}

\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
API Number{{ wellGraphic.attributes.APINumber }}
Lease Name{{ wellGraphic.attributes.LeaseName }}
Well Number{{ wellGraphic.attributes.WellNumber }}
County{{ wellGraphic.attributes.CountyName }}
UIC Type{{ wellGraphic.attributes.UICType }}
Injection Top Interval{{ wellGraphic.attributes.InjectionTopInterval }}
Injection Bottom Interval{{ wellGraphic.attributes.InjectionBottomInterval }}
Available Injection Volume Records{{ (injectionService.currentRecords | async)?.length }}
Available Injection Pressure Records{{ (bhpService.currentRecords | async)?.length }}
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","export default \"

{{ title }}

\\r\\n
\\r\\n

{{message}}

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","export default \"
\\r\\n
\\r\\n
\\r\\n\\r\\n

From

\\r\\n

Measurement On

\\r\\n
\\r\\n \\r\\n Select the first day\\r\\n Select the day of the measurement\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n

To

\\r\\n
\\r\\n \\r\\n Select the last day\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Date bounds are invalid\\r\\n
\\r\\n
\\r\\n\";","export default \"

Delete Injection Data

\\r\\n
\\r\\n

Select the dates you wish to delete injection data for. This is inclusive - records occurring on or between these dates will be deleted.

\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","export default \"

Edit Formations for UIC: {{ well.Uicnumber }}

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n

Enter the name of a formation you wish to add below.

\\r\\n
\\r\\n
\\r\\n \\r\\n Formation Name\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Search Results\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n No results - enter a formation name above\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n

{{ formation.Name }}

\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Selected Formations\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n No formations have been selected.\\r\\n \\r\\n\\r\\n\\r\\n \\r\\n

{{ formation.Name }}

\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","export default \"

error-dialog works!

\\r\\n\";","export default \"

Enter Export Dates

\\r\\n
\\r\\n

Select a begin and end date for the data you wish to export.

\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\";","export default \"

Data Export in Progress

\\r\\n
\\r\\n

Please wait while the file you requested is generated. For large datasets, this process can take some time. Please be patient.

\\r\\n \\r\\n
\\r\\n\";","export default \"
\\r\\n
128}\\\">\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{entryItem.titleAbbreviated}}
\\r\\n \\r\\n {{faqItem.question}}\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n

{{entryItem.title}}

\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n {{faqItem.question}}\\r\\n \\r\\n \\r\\n \\r\\n
    \\r\\n
  • {{ listItem }}
  • \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n
\\r\\n \\r\\n Salt Water\\r\\n \\r\\n This cannot be greater than 100.\\r\\n \\r\\n \\r\\n Fresh Water\\r\\n \\r\\n \\r\\n \\r\\n Fracture Water Flowback\\r\\n \\r\\n \\r\\n \\r\\n Norm\\r\\n \\r\\n \\r\\n \\r\\n CO2\\r\\n \\r\\n \\r\\n \\r\\n Natural Gas\\r\\n \\r\\n \\r\\n \\r\\n H2S\\r\\n \\r\\n \\r\\n \\r\\n Polymer\\r\\n \\r\\n \\r\\n \\r\\n Steam\\r\\n \\r\\n \\r\\n \\r\\n Air\\r\\n \\r\\n \\r\\n \\r\\n Nitrogen\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Other\\r\\n \\r\\n \\r\\n \\r\\n Other Description\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n The total of all fluid injection percentages must be exactly equal 100. Current total is {{ form.errors?.totalPercentages }}.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n When specifying injection of the \\\"other\\\" type, you must provide a description.\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n
\\r\\n

Help Videos

\\r\\n

This page contains a series of videos intended to help new users through the process of using the TexNet Injection/Pressure Reporting Tool.

\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n

User Account Registration

\\r\\n

In this video, we step through the process of creating a user acount for the Tool, and explain why some new users are unable to log in immediately after registering an account.

\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n

Submitting Injection Volume Data

\\r\\n

In this video, we step through the process of submitting a batch of injection volume data to the Tool. This video also discusses the use of the injection volume submission process's Excel template feature.

\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n

Submitting Injection Pressure Data

\\r\\n

In this video, we step through the process of submitting a batch of injection pressure data to the Tool. This video also discusses the use of the injection pressure submission process's Excel template feature.

\\r\\n \\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Help\\r\\n \\r\\n \\r\\n

The list of wells associated with your approved operators are shown below. Access to additional operators can be requested on the user settings page, via the menu in the upper right.

\\r\\n\\r\\n
Finding Wells
\\r\\n

The list of wells can be filtered by entering a partial API number, UIC number, lease name or well number into the text fields at the top of the table. The list can be sorted by clicking on the arrow icon to the right of the filter field that appears when mousing over it.

\\r\\n

If you are unable to find a well you believe should be listed, be sure to check that you do not have any unintended filter values entered into the search boxes, such as those used in a previous search. Failure to clear the filtering fields out can lead to the erroneous conclusion that the desired well is not present, when it is actually being excluded based on conflicting search parameters.

\\r\\n\\r\\n
Exporting Data
\\r\\n

Injection data for multiple wells can be exported using the \\\"Export...\\\" menu at the right-hand side of this page. Presently, only the Excel format is supported.

\\r\\n

When exporting data, only wells that are selected with the checkbox are used. If you do not have at least one well selected, the output will contain only the header rows.

\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n My Wells\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n The list below has been filtered. To see all wells, clear the filters.\\r\\n
\\r\\n\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Details\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{element.Apinumber}}\\r\\n \\r\\n \\r\\n \\r\\n {{element.Uicnumber}}\\r\\n \\r\\n \\r\\n \\r\\n {{element.LeaseName}}\\r\\n \\r\\n \\r\\n \\r\\n {{element.WellNumber}}\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n {{ element.OperatorOperatorName }}Injection Top Interval\\r\\n {{ element.InjectionTopInterval }} ft.\\r\\n Injection Bottom Interval\\r\\n {{ element.InjectionBottomInterval }} ft.\\r\\n Last Injection Date{{ element.LastInjectionDate | date:'yyyy-MM-dd' : 'UTC'}}\\r\\n
\\r\\n Num. Injection Recs.\\r\\n
Exclude Zero
\\r\\n
\\r\\n
{{ element.InjectionsCount }}\\r\\n
\\r\\n Favorites Only\\r\\n
\\r\\n
\\r\\n
\\r\\n favorite\\r\\n favorite_border\\r\\n
\\r\\n
\\r\\n No wells found\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","export default \"

\\r\\n Import Completed Excel Template Data\\r\\n

\\r\\n
\\r\\n
\\r\\n\\r\\n

Select your completed injection form.

\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","export default \"

injection-composition-data-grid works!

\\n\";","export default \"
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\r\\n
No data
\\r\\n\\r\\n \\r\\n \\r\\n
Injection Date\\r\\n {{ injectionFormRows.controls[index].controls[DateFieldName].value | date:'yyyy/MM/dd':'UTC' }}\\r\\n \\r\\n Invalid date.\\r\\n \\r\\n \\r\\n {{ columnData[col]?.label }}\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n {{ opt.label }}\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
No data
\\r\\n\\r\\n \\r\\n \\r\\n
Date\\r\\n {{ element.InjectionDate | date:'yyyy/MM':'UTC' }}\\r\\n {{ element.InjectionDate | date:'yyyy/MM/dd':'UTC' }}\\r\\n Injection Pressure (AVG PSIG)\\r\\n {{ element.InjectionPressureAveragePsig }}\\r\\n Injection Pressure (MAX PSIG)\\r\\n {{ element.InjectionPressureMaxPsig }}\\r\\n Volume Injected (BBLs)\\r\\n {{ element.VolumeInjectedBbl }}\\r\\n Volume Injected (MCF)\\r\\n {{ element.TotalGasVolumeMcf }}\\r\\n Annulus Pressure Num. Readings\\r\\n {{ element.AnnulusPressureNumReadings }}\\r\\n Annulus Pressure Min. PSIG\\r\\n {{ element.AnnulusPressureMinPsig }}\\r\\n Annulus Pressure Max. PSIG\\r\\n {{ element.AnnulusPressureMaxPsig }}\\r\\n Date Added\\r\\n {{ element.DateRowAdded | date:'yyyy/MM/dd':'UTC'}}\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\";","export default \"

injection-density-data-grid works!

\\n\";","export default \"
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
{{ formation.Name }}
\\r\\n
\\r\\n\";","export default \"
\\r\\n\";","export default \"

injection-interval-data-grid works!

\\n\";","export default \"

injection-pressure-data-grid works!

\\n\";","export default \"
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n Edit Injection Pressure Record\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n Shutin Pressure\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Shutin BHP Daily (PSIG)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Shutin BHP, Quarterly - Calculated (PSIG)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Shutin BHP, Quarterly - Measured (PSIG)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n You must supply only one shutin pressure.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n You must supply one shutin pressure value.\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Measurement Parameters\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Top of Completed Interval TVD (ft.)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Liquid Density (lb/gal)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Meas Surf P Static (PSIG)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n Shutin Time for Static Pressure (Hrs)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Measured Pressure Statistics\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n MEAS BHP AVE INJ (PSIG)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n MEAS BHP MAX INJ (PSIG)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Calculated or Estimated Pressure Statistics\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n CALC BHP AVE INJ (PSIG)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n CALC BHP MAX INJ (PSIG)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\";","export default \"\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
Injection Date{{ element.InjectionDate | date:'yyyy/MM/dd' : 'UTC' }}Injected Volume (Bbls){{ element.VolumeInjectedBbl }}Injection Pressure Avg. (PSIG){{ element.InjectionPressureAveragePsig }}Injection Pressure Max (PSIG){{ element.InjectionPressureMaxPsig }}Injection Rate Maximum (Bbl/min){{ element.MaxDayInjLiqRate }}Total Gas Volume (MCF){{ element.TotalGasVolumeMcf }}Max Day Inj. Gas Rate (SCFPM){{ element.MaxDayInjGasRate }}Annulus Pressure Num. Readings{{ element.AnnulusPressureNumReadings }}Annulus Pressure Min. (PSIG){{ element.AnnulusPressureMinPsig }}Annulus Pressure Max. (PSIG){{ element.AnnulusPressureMaxPsig }}Completed Injection Interval Top (Ft.){{ element.CurrentInjectionIntervalTop }}Completed Injection Interval Bottom (Ft.){{ element.CurrentInjectionIntervalBottom }}Depth of Tubing Packer{{ element.DepthTubingPacker }}Formations\\r\\n
\\r\\n {{ formationNamesById[formId] }}\\r\\n
\\r\\n
Injected Fluids Other Sources{{ element.InjectedFluidsOtherSources }}InjectionThrough{{ element.InjectionThrough }}Percent Salt Water{{ element.FractionSaltWater }}Percent Fresh Water{{ element.FractionFreshWater }}Percent Frac Water Flowback{{ element.FractionFractureWaterFlowback }}Percent Norm{{ element.FractionNorm }}Percent CO2{{ element.FractionCo2 }}Percent Natural Gas{{ element.FractionNaturalGas }}Percent H2S{{ element.FractionH2s }}Percent Polymer{{ element.FractionPolymer }}Percent Steam{{ element.FractionSteam }}Percent Air{{ element.FractionAir }}Percent Nitrogen{{ element.FractionNitrogen }}Percent Other{{ element.FractionOther }}Other Description{{ element.OtherDesc }}
\\r\\n\";","export default \"
\\r\\n \\r\\n\\r\\n
\\r\\n \\r\\n Edit Injection Record\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n Injection Pressure\\r\\n H-10 Field 13\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Average (PSIG)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Max(PSIG)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Total Volume Injected\\r\\n H-10 Field 14\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Liquid Volume (BBLs)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Gas Volume (Mcf)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Injection Rate\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Liquid Rate (Bbl/min)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Gas Rate (Mcf/min)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Annulus Pressure\\r\\n H-10 Field 15\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Annulus Pressure Number of Readings\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Annulus Pressure Min. PSIG\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Annulus Pressure Max. PSIG\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\\r\\n \\r\\n Completed Injection Interval (perforated or open hole interval)\\r\\n H-10 Field 16\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Top (ft)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Bottom (ft)\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Formations\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n Depth of Tubing Packer\\r\\n H-10 Field 17\\r\\n \\r\\n \\r\\n \\r\\n Depth of Tubing Packer (ft)\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n Injected fluids are from other sources?\\r\\n H-10 Field 18\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n Injected fluids from other sources?\\r\\n \\r\\n \\r\\n \\r\\n Yes\\r\\n No\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Injection Through:\\r\\n H-10 Field 19\\r\\n
\\r\\n \\r\\n \\r\\n Injection Through...\\r\\n \\r\\n \\r\\n \\r\\n Tubing\\r\\n Casing\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Fluid Fractions\\r\\n H-10 Field 20\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Salt Water\\r\\n \\r\\n This cannot be greater than 100.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Fresh Water\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Fracture Water Flowback\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Norm\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n CO2\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Natural Gas\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n H2S\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Polymer\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Steam\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Air\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Nitrogen\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Other\\r\\n \\r\\n \\r\\n \\r\\n Other Description\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n The total of all fluid injection percentages must be exactly equal 100. Current total is {{ mainFormGroup?.errors?.totalPercentages }}.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n When specifying injection of the \\\"other\\\" type, you must provide a description.\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"

{{data.title}}

\\r\\n
\\r\\n

{{data.body}}

\\r\\n \\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n Login\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Email Address\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Password\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n {{ error }}\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n If you need to register an account, click here.\\r\\n
\\r\\n
\\r\\n If you have forgotten your password, click here.\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"

{{ data.title }}

\\r\\n
\\r\\n

{{data.message}}

\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\";","export default \"
\\r\\n
\\r\\n
\\r\\n

From

\\r\\n
\\r\\n \\r\\n Year\\r\\n \\r\\n \\r\\n {{ year }}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Month\\r\\n \\r\\n \\r\\n {{ month.name }}\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n

To

\\r\\n
\\r\\n \\r\\n Year\\r\\n \\r\\n \\r\\n {{ year }}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Month\\r\\n \\r\\n \\r\\n {{ month.name }}\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Date bounds are invalid\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n\\r\\n Completed Injection Interval (perforated or open hole interval)\\r\\n H-10 Field 16\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n From (ft.)\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n To (ft.)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n You have entered a top interval that is deeper than the bottom interval.\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n Depth of Tubing Packer\\r\\n H-10 Field 17\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n Depth (ft.)\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Depth of tubing packer must be less than the top of the injection interval.\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Injection Into Formations\\r\\n You must select at least one formation.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n You must select at least one formation.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n Are the injected fluids produced from sources other than your own?\\r\\n H-10 Field 18\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Yes\\r\\n No\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Injection Through:\\r\\n H-10 Field 19\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Tubing\\r\\n Casing\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Types of fluids injected during the reporting cycle:\\r\\n H-10 Field 20\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Enter Email Address\\r\\n
\\r\\n
\\r\\n \\r\\n Email Address\\r\\n \\r\\n {{getEmailAddressErrorMessage()}}\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Password\\r\\n \\r\\n The password must have at least eight characters.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Confirm Password\\r\\n \\r\\n Passwords must match\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n The email address you have entered is already in use.\\r\\n

If you need to reset your password, you can do so here.

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n Tell Us About Yourself\\r\\n
\\r\\n \\r\\n First Name\\r\\n \\r\\n First name is required.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Last Name\\r\\n \\r\\n Last name is required.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Telephone Number\\r\\n \\r\\n Telephone number is required.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n Which operator(s) do you work for?\\r\\n\\r\\n
\\r\\n
\\r\\n

Enter the RRC P-5 number for the operator you work for in the field below, and allow the list on the left to populate. Then, select the operators you work for by clicking the arrow buttons to move them into the list on the right. When you are done, click on the next button, below.

\\r\\n
\\r\\n
\\r\\n \\r\\n RRC P-5 Number\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Search Results\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n No results - enter a P-5 number above\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n

{{ operator.OperatorName }}

\\r\\n

P-5#: {{ operator.OperatorNumber }}

\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Selected Operators\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n No operator selected. You must select at least one operator to continue.\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n

{{ operator.OperatorName }}

\\r\\n

P-5#: {{ operator.OperatorNumber }}

\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n Submit For Approval\\r\\n
\\r\\n
\\r\\n \\r\\n Account Details\\r\\n When you click on the submit button below, a user account will be requested with details shown below.\\r\\n \\r\\n \\r\\n \\r\\n

Email Address

\\r\\n

{{ emailAddressForm.controls.emailAddress.value }}

\\r\\n
\\r\\n \\r\\n

Password

\\r\\n

Not Shown - confirmed

\\r\\n
\\r\\n \\r\\n

First Name

\\r\\n

{{ tellUsAboutForm.controls.firstName.value }}

\\r\\n
\\r\\n \\r\\n

Last Name

\\r\\n

{{tellUsAboutForm.controls.lastName.value }}

\\r\\n
\\r\\n \\r\\n

Telephone number

\\r\\n

{{ tellUsAboutForm.controls.phone.value }}

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Operators\\r\\n An email will be dispatched to the designated approver at each of the following operators requesting approval of your user account.\\r\\n \\r\\n \\r\\n

{{ operator.OperatorName }}

\\r\\n

P-5#: {{ operator.OperatorNumber }}

\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n

By clicking the submit button below, I agree to use the TexNet Injection/Pressure Reporting Tool only for its intended purpose, which is the submission of injection volume and pressure records to the Bureau of Economic Geology and Railroad Commission of Texas.

\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n \\r\\n Reset Password\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n

Enter the email address associated with your account below and click on the \\\"Submit\\\" button.

\\r\\n \\r\\n \\r\\n Email Address\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Populate with last injection data?\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","export default \"

sideload-injection works!

\\n\";","export default \"
\\r\\n \\r\\n User Confirmation\\r\\n \\r\\n
\\r\\n

Please wait while we confirm your user account...

\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n

Your account has been confirmed, and an email has been dispatched to your company's designated approver. Once he or she has approved your account, will receive an email indicating that your account is approved and ready for use. Until that time, you will not be able to log in. Please be patient, as this manual approval step sometimes takes somet time to complete.

\\r\\n Click here to return to the login page\\r\\n
\\r\\n\\r\\n
\\r\\n

Uh oh! Something went wrong while trying to approve your account. Please contact the adminstrators.

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n
\\r\\n \\r\\n Change Password\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Old Password\\r\\n \\r\\n You must enter the current password.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n New Password\\r\\n \\r\\n You must enter a new password.\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Repeat New Password\\r\\n \\r\\n You must repeat the new password.\\r\\n \\r\\n
\\r\\n Repeated password does not match.\\r\\n\\r\\n Password must be at least 8 characters.\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n My Approved Operators\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n \\r\\n \\r\\n

{{ operator.OperatorName }}

\\r\\n

P-5#: {{ operator.OperatorNumber }}

\\r\\n

Approved

\\r\\n

Denied

\\r\\n

Pending

\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Request Additional Operators\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n

Enter the RRC P-5 number for the operator you work for in the field below, and allow the list on the left to populate. Then, select the operators you work for by clicking the arrow buttons to move them into the list on the right. When you are done, click on the next button, below.

\\r\\n
\\r\\n
\\r\\n \\r\\n RRC P-5 Number\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Search Results\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n No results - enter a P-5 number above\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n

{{ operator.OperatorName }}

\\r\\n

P-5#: {{ operator.OperatorNumber }}

\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Selected Operators\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n No operator selected. You must select at least one operator to continue.\\r\\n \\r\\n\\r\\n\\r\\n \\r\\n

{{ operator.OperatorName }}

\\r\\n

P-5#: {{ operator.OperatorNumber }}

\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n\";","export default \"
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
No data
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
Date
\\r\\n
\\r\\n {{ injectionFormRows.controls[index].controls[DateFieldName].value | date: (dateFormat != null ? dateFormat : injectionService.getDateStringFormat(injectionData.Injections[index])):'UTC' }}\\r\\n \\r\\n Invalid date.\\r\\n \\r\\n \\r\\n
{{ columnData[col]?.label + (columnData[col]?.required ? ' *' : '')}}
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n {{ opt.label }}\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n\";","export default \"
\\r\\n
\\r\\n No validation errors occurred.\\r\\n
\\r\\n
\\r\\n
    \\r\\n
  • {{ reason }}
  • \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"

\\r\\n RRC/TexNet Injection/Pressure Reporting Tool\\r\\n

\\r\\n
\\r\\n

This application exists to allow well operators in Texas to share information regarding injection of water and other fluids into the subsurface, and for stakeholders, including scientists, regulators and the public, to get access to those data. If you require support, please email the TexNet Team at texnet-web-support@beg.utexas.edu.

\\r\\n

The TexNet Injection and Pressure Reporting Tool (“Tool”) uses data provided entirely by third-party well operators.  TexNet is unable to verify the accuracy of the data available in the Tool.  TexNet and the University of Texas at Austin provide you, the User, with access to the Tool and the corresponding data therein “as is”, without warranties, guarantees, certifications, or representations of any kind.

\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n UIC Number: {{ well.Uicnumber }}\\r\\n API Number: {{ well.Apinumber }}\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Operator Name:\\r\\n \\r\\n \\r\\n {{ well.OperatorOperatorName }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Operator Number:\\r\\n \\r\\n \\r\\n {{ well.OperatorOperatorNumber }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n RRC District Number:\\r\\n \\r\\n \\r\\n {{ well.RRCDistrict }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Oil Lease Number:\\r\\n \\r\\n \\r\\n {{ well.LeaseNumber }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Field Name:\\r\\n \\r\\n \\r\\n {{ well.FieldName }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n County:\\r\\n \\r\\n \\r\\n {{ well.CountyName }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Lease Name:\\r\\n \\r\\n \\r\\n {{ well.LeaseName }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Well Number:\\r\\n \\r\\n \\r\\n {{ well.WellNumber }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Injection Interval Top:\\r\\n \\r\\n \\r\\n {{ well.InjectionTopInterval }} ft.\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Injection Interval Bottom:\\r\\n \\r\\n \\r\\n {{ well.InjectionBottomInterval }} ft.\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Surface Latitude:\\r\\n \\r\\n \\r\\n {{ well.SurfaceLatitude }} °\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Surface Longitude:\\r\\n \\r\\n \\r\\n {{ well.SurfaceLongitude }} °\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n Well Id:\\r\\n \\r\\n \\r\\n {{ well.Id }}\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n Formations ({{ well.Formations.length }})\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n \\r\\n {{ formation.Name }}\\r\\n\\r\\n No formations\\r\\n \\r\\n\\r\\n\";","export default \"
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Help\\r\\n \\r\\n \\r\\n

Two types of injection records are required for each well - injection volume, and injection pressure. Each type is shown on a separate tab on this page, below.

\\r\\n\\r\\n
Adding Injection Volume Records
\\r\\n

To add injection volume records, click on the \\\"Submit Injection Volume Data\\\" button at the top left of the tab. The process consists of several steps, and you will need to have all of the relevant information, approximately equivalent to the RRC H-10 form, available before you begin. Further instructions for the input process are provided on the input page.

\\r\\n\\r\\n\\r\\n
Adding Injection Pressure Records
\\r\\n

To add injection pressure records, first, switch to the injection pressure tab, and click on the \\\"Submit Injection Pressure Data\\\" button at the top left of the tab. The process consists of two steps. The first step requires you to specify the beginning and ending dates for the period that you are reporting for. The second step will require you to enter the relevant injection pressure values into a form, or into an excel template which is then imported to populate the form.

\\r\\n\\r\\n
Updating Injection Records
\\r\\n

You may update an injection volume or pressure record by clicking on its edit (mode_edit) icon in the column at the left. You will be presented with a form that allows you to edit the record.

\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n
\\r\\n Warning: No formation information is available for this well. Addition of injection information, which requires at least one formation, has been disabled.\\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
Edit\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n Date{{element.InjectionDate | date: injectionService.getDateStringFormat(injectionDataSource.data[index]): 'UTC' }}Avg PSIG{{element.InjectionPressureAveragePsig}}Max PSIG{{element.InjectionPressureMaxPsig}}BBLs{{element.VolumeInjectedBbl }}MCF{{ element.TotalGasVolumeMcf }}Num Readings{{ element.AnnulusPressureNumReadings }}Min PSIG{{ element.AnnulusPressureMinPsig }}Max PSIG{{ element.AnnulusPressureMaxPsig }}Inj. Rate Maximum (Bbl/min){{ element.MaxDayInjLiqRate }}Date Added\\r\\n {{ element.DateRowAdded | date:'yyyy/MM/dd':'UTC'}}\\r\\n
\\r\\n
\\r\\n No records found\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
Edit\\r\\n \\r\\n\\r\\n \\r\\n\\r\\n Date{{element.MeasurementDate | date:'yyyy-MM-dd' : 'UTC'}}Shut-In BHP Daily{{element.ShutinBHPDaily}}Shut-In BHP Quarterly (Calculated){{element.ShutinBHPQuarterlyCalc}}Shut-In BHP Quarterly (Measured){{element.ShutinBHPQuarterlyMeas}}Pressure calculated to top of completed interval TVD{{element.TvdDepBHPSensor}}Liquid Density (Lbs./Gal){{element.MeaDayInjLiqDens}}MEAS BHP AVE INJ (PSIG){{element.AveDayMeasBHP}}MEAS BHP MAX INJ (PSIG){{element.MaxDayMeasBHP}}CALC BHP AVE INJ (PSIG){{element.AveDayEstBHP}}CALC BHP MAX INJ (PSIG){{element.MaxDayEstBHP}}Shutin Time for Static Pressure{{element.ShutinTimeForStaticPress}}Pressure Gradient (PSI/FT){{element.PressureGradient ? element.PressureGradient.toPrecision(4): ''}}Date Added\\r\\n {{ element.DateRowAdded | date:'yyyy/MM/dd':'UTC'}}\\r\\n
\\r\\n
\\r\\n No records found\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n Well Lookup\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Well Id\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n UIC Number\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n API Number\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Lease Name\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Well Number\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Operator Name\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Operator p5 Number\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n Wells Found: {{wellRecords.length}}\\r\\n\\r\\n\\r\\n\";","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 41993;\nmodule.exports = webpackEmptyAsyncContext;","var map = {\n\t\"./af\": 62275,\n\t\"./af.js\": 62275,\n\t\"./ar\": 90857,\n\t\"./ar-dz\": 11218,\n\t\"./ar-dz.js\": 11218,\n\t\"./ar-kw\": 14754,\n\t\"./ar-kw.js\": 14754,\n\t\"./ar-ly\": 66680,\n\t\"./ar-ly.js\": 66680,\n\t\"./ar-ma\": 92178,\n\t\"./ar-ma.js\": 92178,\n\t\"./ar-ps\": 42060,\n\t\"./ar-ps.js\": 42060,\n\t\"./ar-sa\": 56522,\n\t\"./ar-sa.js\": 56522,\n\t\"./ar-tn\": 95682,\n\t\"./ar-tn.js\": 95682,\n\t\"./ar.js\": 90857,\n\t\"./az\": 70164,\n\t\"./az.js\": 70164,\n\t\"./be\": 79774,\n\t\"./be.js\": 79774,\n\t\"./bg\": 60947,\n\t\"./bg.js\": 60947,\n\t\"./bm\": 21832,\n\t\"./bm.js\": 21832,\n\t\"./bn\": 89650,\n\t\"./bn-bd\": 74477,\n\t\"./bn-bd.js\": 74477,\n\t\"./bn.js\": 89650,\n\t\"./bo\": 66005,\n\t\"./bo.js\": 66005,\n\t\"./br\": 98492,\n\t\"./br.js\": 98492,\n\t\"./bs\": 70534,\n\t\"./bs.js\": 70534,\n\t\"./ca\": 52061,\n\t\"./ca.js\": 52061,\n\t\"./cs\": 84737,\n\t\"./cs.js\": 84737,\n\t\"./cv\": 59720,\n\t\"./cv.js\": 59720,\n\t\"./cy\": 77996,\n\t\"./cy.js\": 77996,\n\t\"./da\": 9528,\n\t\"./da.js\": 9528,\n\t\"./de\": 14540,\n\t\"./de-at\": 49430,\n\t\"./de-at.js\": 49430,\n\t\"./de-ch\": 67978,\n\t\"./de-ch.js\": 67978,\n\t\"./de.js\": 14540,\n\t\"./dv\": 83426,\n\t\"./dv.js\": 83426,\n\t\"./el\": 6616,\n\t\"./el.js\": 6616,\n\t\"./en-au\": 63816,\n\t\"./en-au.js\": 63816,\n\t\"./en-ca\": 32162,\n\t\"./en-ca.js\": 32162,\n\t\"./en-gb\": 83305,\n\t\"./en-gb.js\": 83305,\n\t\"./en-ie\": 61954,\n\t\"./en-ie.js\": 61954,\n\t\"./en-il\": 43060,\n\t\"./en-il.js\": 43060,\n\t\"./en-in\": 59923,\n\t\"./en-in.js\": 59923,\n\t\"./en-nz\": 13540,\n\t\"./en-nz.js\": 13540,\n\t\"./en-sg\": 16505,\n\t\"./en-sg.js\": 16505,\n\t\"./eo\": 41907,\n\t\"./eo.js\": 41907,\n\t\"./es\": 86640,\n\t\"./es-do\": 41246,\n\t\"./es-do.js\": 41246,\n\t\"./es-mx\": 56131,\n\t\"./es-mx.js\": 56131,\n\t\"./es-us\": 36430,\n\t\"./es-us.js\": 36430,\n\t\"./es.js\": 86640,\n\t\"./et\": 62551,\n\t\"./et.js\": 62551,\n\t\"./eu\": 32169,\n\t\"./eu.js\": 32169,\n\t\"./fa\": 54572,\n\t\"./fa.js\": 54572,\n\t\"./fi\": 33390,\n\t\"./fi.js\": 33390,\n\t\"./fil\": 87860,\n\t\"./fil.js\": 87860,\n\t\"./fo\": 48216,\n\t\"./fo.js\": 48216,\n\t\"./fr\": 99291,\n\t\"./fr-ca\": 98527,\n\t\"./fr-ca.js\": 98527,\n\t\"./fr-ch\": 58407,\n\t\"./fr-ch.js\": 58407,\n\t\"./fr.js\": 99291,\n\t\"./fy\": 47054,\n\t\"./fy.js\": 47054,\n\t\"./ga\": 49540,\n\t\"./ga.js\": 49540,\n\t\"./gd\": 73917,\n\t\"./gd.js\": 73917,\n\t\"./gl\": 51486,\n\t\"./gl.js\": 51486,\n\t\"./gom-deva\": 56245,\n\t\"./gom-deva.js\": 56245,\n\t\"./gom-latn\": 48868,\n\t\"./gom-latn.js\": 48868,\n\t\"./gu\": 59652,\n\t\"./gu.js\": 59652,\n\t\"./he\": 89019,\n\t\"./he.js\": 89019,\n\t\"./hi\": 42040,\n\t\"./hi.js\": 42040,\n\t\"./hr\": 63402,\n\t\"./hr.js\": 63402,\n\t\"./hu\": 79322,\n\t\"./hu.js\": 79322,\n\t\"./hy-am\": 19135,\n\t\"./hy-am.js\": 19135,\n\t\"./id\": 57942,\n\t\"./id.js\": 57942,\n\t\"./is\": 98275,\n\t\"./is.js\": 98275,\n\t\"./it\": 73053,\n\t\"./it-ch\": 4378,\n\t\"./it-ch.js\": 4378,\n\t\"./it.js\": 73053,\n\t\"./ja\": 46176,\n\t\"./ja.js\": 46176,\n\t\"./jv\": 679,\n\t\"./jv.js\": 679,\n\t\"./ka\": 92726,\n\t\"./ka.js\": 92726,\n\t\"./kk\": 72953,\n\t\"./kk.js\": 72953,\n\t\"./km\": 86957,\n\t\"./km.js\": 86957,\n\t\"./kn\": 59181,\n\t\"./kn.js\": 59181,\n\t\"./ko\": 47148,\n\t\"./ko.js\": 47148,\n\t\"./ku\": 27752,\n\t\"./ku-kmr\": 63898,\n\t\"./ku-kmr.js\": 63898,\n\t\"./ku.js\": 27752,\n\t\"./ky\": 65675,\n\t\"./ky.js\": 65675,\n\t\"./lb\": 41263,\n\t\"./lb.js\": 41263,\n\t\"./lo\": 65746,\n\t\"./lo.js\": 65746,\n\t\"./lt\": 11143,\n\t\"./lt.js\": 11143,\n\t\"./lv\": 38753,\n\t\"./lv.js\": 38753,\n\t\"./me\": 44054,\n\t\"./me.js\": 44054,\n\t\"./mi\": 31573,\n\t\"./mi.js\": 31573,\n\t\"./mk\": 30202,\n\t\"./mk.js\": 30202,\n\t\"./ml\": 68523,\n\t\"./ml.js\": 68523,\n\t\"./mn\": 79794,\n\t\"./mn.js\": 79794,\n\t\"./mr\": 56681,\n\t\"./mr.js\": 56681,\n\t\"./ms\": 56975,\n\t\"./ms-my\": 39859,\n\t\"./ms-my.js\": 39859,\n\t\"./ms.js\": 56975,\n\t\"./mt\": 3691,\n\t\"./mt.js\": 3691,\n\t\"./my\": 5152,\n\t\"./my.js\": 5152,\n\t\"./nb\": 7607,\n\t\"./nb.js\": 7607,\n\t\"./ne\": 21526,\n\t\"./ne.js\": 21526,\n\t\"./nl\": 86368,\n\t\"./nl-be\": 40076,\n\t\"./nl-be.js\": 40076,\n\t\"./nl.js\": 86368,\n\t\"./nn\": 68420,\n\t\"./nn.js\": 68420,\n\t\"./oc-lnc\": 51906,\n\t\"./oc-lnc.js\": 51906,\n\t\"./pa-in\": 94504,\n\t\"./pa-in.js\": 94504,\n\t\"./pl\": 54721,\n\t\"./pl.js\": 54721,\n\t\"./pt\": 74645,\n\t\"./pt-br\": 54548,\n\t\"./pt-br.js\": 54548,\n\t\"./pt.js\": 74645,\n\t\"./ro\": 71977,\n\t\"./ro.js\": 71977,\n\t\"./ru\": 26042,\n\t\"./ru.js\": 26042,\n\t\"./sd\": 78849,\n\t\"./sd.js\": 78849,\n\t\"./se\": 27739,\n\t\"./se.js\": 27739,\n\t\"./si\": 50084,\n\t\"./si.js\": 50084,\n\t\"./sk\": 92449,\n\t\"./sk.js\": 92449,\n\t\"./sl\": 23086,\n\t\"./sl.js\": 23086,\n\t\"./sq\": 33139,\n\t\"./sq.js\": 33139,\n\t\"./sr\": 30607,\n\t\"./sr-cyrl\": 30063,\n\t\"./sr-cyrl.js\": 30063,\n\t\"./sr.js\": 30607,\n\t\"./ss\": 40131,\n\t\"./ss.js\": 40131,\n\t\"./sv\": 21665,\n\t\"./sv.js\": 21665,\n\t\"./sw\": 5642,\n\t\"./sw.js\": 5642,\n\t\"./ta\": 33622,\n\t\"./ta.js\": 33622,\n\t\"./te\": 74825,\n\t\"./te.js\": 74825,\n\t\"./tet\": 48336,\n\t\"./tet.js\": 48336,\n\t\"./tg\": 39238,\n\t\"./tg.js\": 39238,\n\t\"./th\": 99463,\n\t\"./th.js\": 99463,\n\t\"./tk\": 39986,\n\t\"./tk.js\": 39986,\n\t\"./tl-ph\": 29672,\n\t\"./tl-ph.js\": 29672,\n\t\"./tlh\": 40043,\n\t\"./tlh.js\": 40043,\n\t\"./tr\": 51212,\n\t\"./tr.js\": 51212,\n\t\"./tzl\": 50110,\n\t\"./tzl.js\": 50110,\n\t\"./tzm\": 80482,\n\t\"./tzm-latn\": 38309,\n\t\"./tzm-latn.js\": 38309,\n\t\"./tzm.js\": 80482,\n\t\"./ug-cn\": 42495,\n\t\"./ug-cn.js\": 42495,\n\t\"./uk\": 54157,\n\t\"./uk.js\": 54157,\n\t\"./ur\": 80984,\n\t\"./ur.js\": 80984,\n\t\"./uz\": 64141,\n\t\"./uz-latn\": 43662,\n\t\"./uz-latn.js\": 43662,\n\t\"./uz.js\": 64141,\n\t\"./vi\": 12607,\n\t\"./vi.js\": 12607,\n\t\"./x-pseudo\": 66460,\n\t\"./x-pseudo.js\": 66460,\n\t\"./yo\": 92948,\n\t\"./yo.js\": 92948,\n\t\"./zh-cn\": 62658,\n\t\"./zh-cn.js\": 62658,\n\t\"./zh-hk\": 39352,\n\t\"./zh-hk.js\": 39352,\n\t\"./zh-mo\": 38274,\n\t\"./zh-mo.js\": 38274,\n\t\"./zh-tw\": 98451,\n\t\"./zh-tw.js\": 98451\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","/* (ignored) */","/* (ignored) */"],"names":[],"sourceRoot":"webpack:///"}