/// <summary> /// Получение перечня ремонтных работ. /// </summary> public ArrayList GetRepairWorks() { ArrayList RepairWorksList = new ArrayList(); // Если прибор гарантийный и гарантия не аннулирована, не включаем ремонтные работы в калькуляцию if ((this.WarrantyRepair) && (!this.VoidWarranty)) { return(RepairWorksList); } // Если клиент отказался от ремонта, то не включаем ремонтные работы в калькуляцию //if (this.RefusalToRepair) //{ return RepairWorksList; } CardData SCard = Card.CardScript.Session.CardManager.GetCardData(new Guid(this.ServiceCardID)); SectionData RepairWorks = SCard.Sections[RefServiceCard.RepairWorks.ID.ToGuid()]; if ((RepairWorks != null) && (RepairWorks.Rows.Count > 0)) { RowDataCollection RowDescriptions = SCard.Sections[RefServiceCard.DescriptionOfFault.ID.ToGuid()].Rows; foreach (RowData Row in RepairWorks.Rows) { if (Row.GetString(RefServiceCard.RepairWorks.NegotiationResult) != "Не выполнять") { RowData Description = null; foreach (RowData RowDescription in RowDescriptions) { if (RowDescription.GetGuid(RefServiceCard.DescriptionOfFault.Id) == Row.GetGuid(RefServiceCard.RepairWorks.ParentTableRowId)) { Description = RowDescription; } } string BlockName = Description.GetString(RefServiceCard.DescriptionOfFault.BlockOfDevice); string BlockNameID = Description.GetString(RefServiceCard.DescriptionOfFault.BlockOfDeviceID); string WorksType = Row.GetString(RefServiceCard.RepairWorks.WorksType); string WorksTypeID = Row.GetString(RefServiceCard.RepairWorks.WorksTypeID); int Amount = this.DoubleCost == true ? (int)Row.GetDecimal(RefServiceCard.RepairWorks.Amount) * 2 : (int)Row.GetDecimal(RefServiceCard.RepairWorks.Amount); bool Improvement = (bool)Row.GetBoolean(RefServiceCard.RepairWorks.Revision); bool VoidWarranty = this.VoidWarranty; bool DoubleCost = this.DoubleCost; string DescriptionOfReason = this.DescriptionOfReason; bool RefusalToRepair = this.RefusalToRepair; CalculationItem NewItem = new CalculationItem(Card, DeviceName, DeviceItemID, BlockName, BlockNameID, WorksType, WorksTypeID, Improvement, Amount, true, VoidWarranty, DoubleCost, DescriptionOfReason, RefusalToRepair); RepairWorksList.Add(NewItem); } } } return(RepairWorksList); }
public PgSQLDataRowStream( PgSQLDataColumnMetaDataImpl metadata, Int32 thisStreamIndex, PgSQLDataRowStream[] allDataRowStreams, PostgreSQLProtocol protocol, ReservedForStatement reservedForStatement, RowDescription rowDescription ) : base(metadata, thisStreamIndex, protocol.Buffer, allDataRowStreams, protocol, reservedForStatement) { var fieldInfo = rowDescription.Fields[thisStreamIndex]; this._dataFormat = fieldInfo.DataFormat; }
/// <summary> /// The first row in a stored procedure command that has output parameters needs to be traversed twice - /// once for populating the output parameters and once for the actual result set traversal. So in this /// case we can't be sequential. /// </summary> void PopulateOutputParameters() { Debug.Assert(Command.Parameters.Any(p => p.IsOutputDirection)); Debug.Assert(StatementIndex == 0); Debug.Assert(RowDescription != null); Debug.Assert(State == ReaderState.BeforeResult); // Temporarily set our state to InResult to allow us to read the values State = ReaderState.InResult; var pending = new Queue <NpgsqlParameter>(); var taken = new List <int>(); foreach (var p in Command.Parameters.Where(p => p.IsOutputDirection)) { if (RowDescription.TryGetFieldIndex(p.ParameterName, out var idx)) { // TODO: Provider-specific check? p.Value = GetValue(idx); taken.Add(idx); } else { pending.Enqueue(p); } } for (var i = 0; pending.Count != 0 && i != _numColumns; ++i) { // TODO: Need to get the provider-specific value based on the out param's type if (!taken.Contains(i)) { pending.Dequeue().Value = GetValue(i); } } State = ReaderState.BeforeResult; // Set the state back }
public static async Task <(BackendMessageObject msg, Int32 msgSize)> ReadBackendMessageAsync( MessageIOArgs ioArgs, ResizableArray <ResettableTransformable <Int32?, Int32> > columnSizes ) { var args = ioArgs.Item1; var stream = ioArgs.Item2; var token = ioArgs.Item3; var buffer = ioArgs.Item4; var code = (BackendMessageCode)(await args.ReadByte(stream, buffer, token)); var length = await args.ReadInt32(stream, buffer, token); var remaining = length - sizeof(Int32); if (code != BackendMessageCode.DataRow && code != BackendMessageCode.CopyData) { // Just read the whole message at once for everything else except DataRow and CopyData messages buffer.CurrentMaxCapacity = remaining; await stream.ReadSpecificAmountAsync(buffer.Array, 0, remaining, token); remaining = 0; } var array = buffer.Array; var encoding = args.Encoding.Encoding; BackendMessageObject result; switch (code) { case BackendMessageCode.AuthenticationRequest: result = new AuthenticationResponse(array, length); break; case BackendMessageCode.ErrorResponse: result = new PgSQLErrorObject(array, encoding, true); break; case BackendMessageCode.NoticeResponse: result = new PgSQLErrorObject(array, encoding, false); break; case BackendMessageCode.RowDescription: result = new RowDescription(array, encoding); break; case BackendMessageCode.DataRow: (result, remaining) = await DataRowObject.ReadDataRow(args, stream, token, array, columnSizes, remaining); break; case BackendMessageCode.ParameterDescription: result = new ParameterDescription(array); break; case BackendMessageCode.ParameterStatus: result = new ParameterStatus(array, encoding); break; case BackendMessageCode.ReadyForQuery: result = new ReadyForQuery(array); break; case BackendMessageCode.BackendKeyData: result = new BackendKeyData(array); break; case BackendMessageCode.CommandComplete: result = new CommandComplete(array, encoding); break; case BackendMessageCode.NotificationResponse: result = new NotificationMessage(array, encoding); break; case BackendMessageCode.CopyInResponse: result = new CopyInOrOutMessage(array, true); break; case BackendMessageCode.CopyOutResponse: result = new CopyInOrOutMessage(array, false); break; case BackendMessageCode.CopyData: result = new CopyDataMessage(length); break; case BackendMessageCode.ParseComplete: result = MessageWithNoContents.PARSE_COMPLETE; break; case BackendMessageCode.BindComplete: result = MessageWithNoContents.BIND_COMPLETE; break; case BackendMessageCode.EmptyQueryResponse: result = MessageWithNoContents.EMPTY_QUERY; break; case BackendMessageCode.NoData: result = MessageWithNoContents.NO_DATA; break; case BackendMessageCode.CopyDone: result = MessageWithNoContents.COPY_DONE; break; case BackendMessageCode.CloseComplete: result = MessageWithNoContents.CLOSE_COMPLETE; break; default: throw new NotSupportedException("Not supported backend response: " + code); } return(result, remaining); }