public ItemRequestFormModel GetItemRequestFormById(int id)
        {
            ItemRequestFormModel result = new ItemRequestFormModel();

            result.RequestFormItems      = new List <ItemList>();
            result.RequestFormQuotations = new List <QuotationList>();
            QuotationList singleQuote  = new QuotationList();
            CodeHeader    ticketStatus = new CodeHeader();
            ItemList      singleItem   = new ItemList();

            var query = _itemRequestFormDataAccess.GetItemRequestFormById(id);

            result.Id           = query.Id;
            result.Title        = query.Title;
            result.DateCreated  = query.CreateDttm;
            result.FollowupDttm = query.FollowupStartDttm.Value;
            result.StatusCd     = query.StatusCd;
            result.Notes        = query.Notes;

            for (int i = 0; i < query.Quotations.Count; i++)
            {
                singleQuote.Id     = query.Quotations.ToList()[i].Id;
                singleQuote.Status = ticketStatus.CodeDetails.Where(x => x.Id == query.Quotations.ToList()[i].StatusCd)
                                     .Select(x => x.CodeValue).FirstOrDefault();
                singleQuote.Notes        = query.Quotations.ToList()[i].Notes;
                singleQuote.Title        = query.Quotations.ToList()[i].Title;
                singleQuote.SupplierName = query.Quotations.ToList()[i].Supplier.SupplierName;

                result.RequestFormQuotations.Add(singleQuote);
                singleQuote = new QuotationList();
            }

            for (int i = 0; i < query.ItemRequestFormMappings.Count; i++)
            {
                singleItem.Id         = query.ItemRequestFormMappings.ToList()[i].ItemID;
                singleItem.ItemName   = query.ItemRequestFormMappings.ToList()[i].Item.ItemName;
                singleItem.StocksLeft = query.ItemRequestFormMappings.ToList()[i].Item.Quantity.Value;
                singleItem.BrandName  = query.ItemRequestFormMappings.ToList()[i].Item.Brand.BrandName;
                singleItem.Notes      = query.ItemRequestFormMappings.ToList()[i].Item.Notes;

                result.RequestFormItems.Add(singleItem);
                singleItem = new ItemList();
            }

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Write a parsed G/M/T code in binary format to a memory span
        /// </summary>
        /// <param name="to">Destination</param>
        /// <param name="code">Code to write</param>
        /// <returns>Number of bytes written</returns>
        /// <exception cref="ArgumentException">Unsupported data type</exception>
        public static int WriteCode(Span <byte> to, Code code)
        {
            int bytesWritten = 0;

            // Write code header
            CodeHeader header = new CodeHeader
            {
                Channel       = code.Channel,
                FilePosition  = (uint)(code.FilePosition ?? 0xFFFFFFFF),
                Letter        = (byte)code.Type,
                MajorCode     = (code.Type == CodeType.Comment) ? 0 : (code.MajorNumber ?? -1),
                MinorCode     = code.MinorNumber ?? -1,
                NumParameters = (byte)((code.Type == CodeType.Comment) ? 1 : code.Parameters.Count)
            };

            if (code.Type == CodeType.Comment || code.MajorNumber != null)
            {
                header.Flags |= CodeFlags.HasMajorCommandNumber;
            }
            if (code.MinorNumber != null)
            {
                header.Flags |= CodeFlags.HasMinorCommandNumber;
            }
            if (code.FilePosition != null)
            {
                header.Flags |= CodeFlags.HasFilePosition;
            }
            if (code.Flags.HasFlag(DuetAPI.Commands.CodeFlags.EnforceAbsolutePosition))
            {
                header.Flags |= CodeFlags.EnforceAbsolutePosition;
            }

            MemoryMarshal.Write(to, ref header);
            bytesWritten += Marshal.SizeOf <CodeHeader>();

            // Write line number
            if (DataTransfer.ProtocolVersion >= 2)
            {
                int lineNumber = (int)(code.LineNumber ?? 0);
                MemoryMarshal.Write(to[bytesWritten..], ref lineNumber);
Пример #3
0
        /// <summary>
        /// Write a parsed G/M/T code in binary format to a memory span
        /// </summary>
        /// <param name="to">Destination</param>
        /// <param name="code">Code to write</param>
        /// <returns>Number of bytes written</returns>
        /// <exception cref="ArgumentException">Unsupported data type</exception>
        public static int WriteCode(Span <byte> to, Code code)
        {
            int bytesWritten = 0;

            // Write code header
            CodeHeader header = new CodeHeader
            {
                Channel       = code.Channel,
                FilePosition  = (uint)(code.FilePosition ?? 0xFFFFFFFF),
                Letter        = (byte)code.Type,
                MajorCode     = code.MajorNumber ?? -1,
                MinorCode     = code.MinorNumber ?? -1,
                NumParameters = (byte)code.Parameters.Count
            };

            if (code.MajorNumber.HasValue)
            {
                header.Flags |= SpiCodeFlags.HasMajorCommandNumber;
            }
            if (code.MinorNumber.HasValue)
            {
                header.Flags |= SpiCodeFlags.HasMinorCommandNumber;
            }
            if (code.FilePosition.HasValue)
            {
                header.Flags |= SpiCodeFlags.HasFilePosition;
            }
            if (code.Flags.HasFlag(DuetAPI.Commands.CodeFlags.EnforceAbsolutePosition))
            {
                header.Flags |= SpiCodeFlags.EnforceAbsolutePosition;
            }

            MemoryMarshal.Write(to, ref header);
            bytesWritten += Marshal.SizeOf(header);

            // Write parameters
            List <object> extraParameters = new List <object>();

            foreach (var parameter in code.Parameters)
            {
                CodeParameter binaryParam = new CodeParameter
                {
                    Letter = (byte)parameter.Letter
                };
                if (parameter.Type == typeof(int))
                {
                    binaryParam.Type     = DataType.Int;
                    binaryParam.IntValue = parameter;
                }
                else if (parameter.Type == typeof(uint))
                {
                    binaryParam.Type      = parameter.IsDriverId ? DataType.DriverId : DataType.UInt;
                    binaryParam.UIntValue = parameter;
                }
                else if (parameter.Type == typeof(float))
                {
                    binaryParam.Type       = DataType.Float;
                    binaryParam.FloatValue = parameter;
                }
                else if (parameter.Type == typeof(int[]))
                {
                    binaryParam.Type = DataType.IntArray;
                    int[] array = parameter;
                    binaryParam.IntValue = array.Length;
                    extraParameters.Add(array);
                }
                else if (parameter.Type == typeof(uint[]))
                {
                    binaryParam.Type = parameter.IsDriverId ? DataType.DriverIdArray : DataType.UIntArray;
                    uint[] array = parameter;
                    binaryParam.IntValue = array.Length;
                    extraParameters.Add(array);
                }
                else if (parameter.Type == typeof(float[]))
                {
                    binaryParam.Type = DataType.FloatArray;
                    float[] array = parameter;
                    binaryParam.IntValue = array.Length;
                    extraParameters.Add(array);
                }
                else if (parameter.Type == typeof(string))
                {
                    string value = parameter;
                    binaryParam.Type     = parameter.IsExpression ? DataType.Expression : DataType.String;
                    binaryParam.IntValue = value.Length;
                    extraParameters.Add(value);
                }
                else
                {
                    throw new ArgumentException("Unsupported type", parameter.Type.Name);
                }

                MemoryMarshal.Write(to.Slice(bytesWritten), ref binaryParam);
                bytesWritten += Marshal.SizeOf(binaryParam);
            }

            // Write extra parameters
            foreach (object parameter in extraParameters)
            {
                if (parameter is int[] intArray)
                {
                    foreach (int val in intArray)
                    {
                        int value = val;
                        MemoryMarshal.Write(to.Slice(bytesWritten), ref value);
                        bytesWritten += Marshal.SizeOf(value);
                    }
                }
                else if (parameter is uint[] uintArray)
                {
                    foreach (uint val in uintArray)
                    {
                        uint value = val;
                        MemoryMarshal.Write(to.Slice(bytesWritten), ref value);
                        bytesWritten += Marshal.SizeOf(value);
                    }
                }
                else if (parameter is float[] floatArray)
                {
                    foreach (float val in floatArray)
                    {
                        float value = val;
                        MemoryMarshal.Write(to.Slice(bytesWritten), ref value);
                        bytesWritten += Marshal.SizeOf(value);
                    }
                }
                else if (parameter is string value)
                {
                    Span <byte> asUnicode = Encoding.UTF8.GetBytes(value);
                    asUnicode.CopyTo(to.Slice(bytesWritten));
                    bytesWritten += asUnicode.Length;
                    bytesWritten  = AddPadding(to, bytesWritten);
                }
                else
                {
                    throw new ArgumentException("Unsupported type", parameter.GetType().Name);
                }
            }

            return(bytesWritten);
        }
Пример #4
0
        /// <summary>
        /// Write a parsed G/M/T code in binary format to a memory span
        /// </summary>
        /// <param name="to">Destination</param>
        /// <param name="code">Code to write</param>
        /// <returns>Number of bytes written</returns>
        /// <exception cref="ArgumentException">Unsupported data type</exception>
        public static int WriteCode(Span <byte> to, Code code)
        {
            int bytesWritten = 0;

            // Write code header
            CodeHeader header = new CodeHeader
            {
                Channel       = code.Channel,
                FilePosition  = (uint)(code.FilePosition ?? 0xFFFFFFFF),
                Letter        = (byte)code.Type,
                MajorCode     = (code.Type == CodeType.Comment) ? 0 : (code.MajorNumber ?? -1),
                MinorCode     = code.MinorNumber ?? -1,
                NumParameters = (byte)((code.Type == CodeType.Comment) ? 1 : code.Parameters.Count)
            };

            if (code.Type == CodeType.Comment || code.MajorNumber != null)
            {
                header.Flags |= CodeFlags.HasMajorCommandNumber;
            }
            if (code.MinorNumber != null)
            {
                header.Flags |= CodeFlags.HasMinorCommandNumber;
            }
            if (code.FilePosition != null)
            {
                header.Flags |= CodeFlags.HasFilePosition;
            }
            if (code.Flags.HasFlag(DuetAPI.Commands.CodeFlags.EnforceAbsolutePosition))
            {
                header.Flags |= CodeFlags.EnforceAbsolutePosition;
            }

            MemoryMarshal.Write(to, ref header);
            bytesWritten += Marshal.SizeOf(header);

            // Write line number
            if (DataTransfer.ProtocolVersion >= 2)
            {
                int lineNumber = (int)(code.LineNumber ?? 0);
                MemoryMarshal.Write(to.Slice(bytesWritten), ref lineNumber);
                bytesWritten += Marshal.SizeOf <int>();
            }

            // Write parameters
            if (code.Type == CodeType.Comment)
            {
                // Write comment as an unprecedented parameter
                string        comment       = (code.Comment ?? string.Empty).Trim();
                int           commentLength = Math.Min(comment.Length, Consts.MaxCommentLength);
                CodeParameter binaryParam   = new CodeParameter
                {
                    Letter   = (byte)'@',
                    IntValue = commentLength,
                    Type     = DataType.String
                };
                MemoryMarshal.Write(to.Slice(bytesWritten), ref binaryParam);
                bytesWritten += Marshal.SizeOf(binaryParam);

                Span <byte> asUnicode = Encoding.UTF8.GetBytes(comment.Substring(0, commentLength));
                asUnicode.CopyTo(to.Slice(bytesWritten));
                bytesWritten += asUnicode.Length;
                bytesWritten  = AddPadding(to, bytesWritten);
            }
            else
            {
                // Write code parameters
                List <object> extraParameters = new List <object>();
                foreach (var parameter in code.Parameters)
                {
                    CodeParameter binaryParam = new CodeParameter
                    {
                        Letter = (byte)parameter.Letter
                    };
                    if (parameter.Type == typeof(int))
                    {
                        binaryParam.Type     = DataType.Int;
                        binaryParam.IntValue = parameter;
                    }
                    else if (parameter.Type == typeof(uint))
                    {
                        binaryParam.Type      = DataType.UInt;
                        binaryParam.UIntValue = parameter;
                    }
                    else if (parameter.Type == typeof(DriverId))
                    {
                        binaryParam.Type      = DataType.DriverId;
                        binaryParam.UIntValue = parameter;
                    }
                    else if (parameter.Type == typeof(float))
                    {
                        binaryParam.Type       = DataType.Float;
                        binaryParam.FloatValue = parameter;
                    }
                    else if (parameter.Type == typeof(int[]))
                    {
                        binaryParam.Type = DataType.IntArray;
                        int[] array = parameter;
                        binaryParam.IntValue = array.Length;
                        extraParameters.Add(array);
                    }
                    else if (parameter.Type == typeof(uint[]))
                    {
                        binaryParam.Type = DataType.UIntArray;
                        uint[] array = parameter;
                        binaryParam.IntValue = array.Length;
                        extraParameters.Add(array);
                    }
                    else if (parameter.Type == typeof(DriverId[]))
                    {
                        binaryParam.Type = DataType.DriverIdArray;
                        DriverId[] array = parameter;
                        binaryParam.IntValue = array.Length;
                        extraParameters.Add(array);
                    }
                    else if (parameter.Type == typeof(float[]))
                    {
                        binaryParam.Type = DataType.FloatArray;
                        float[] array = parameter;
                        binaryParam.IntValue = array.Length;
                        extraParameters.Add(array);
                    }
                    else if (parameter.Type == typeof(string))
                    {
                        string value = parameter;
                        binaryParam.Type     = parameter.IsExpression ? DataType.Expression : DataType.String;
                        binaryParam.IntValue = value.Length;
                        extraParameters.Add(value);
                    }
                    // Boolean values are not supported for codes. Use integers instead
                    else
                    {
                        throw new ArgumentException("Unsupported type", parameter.Type.Name);
                    }

                    MemoryMarshal.Write(to.Slice(bytesWritten), ref binaryParam);
                    bytesWritten += Marshal.SizeOf(binaryParam);
                }

                // Write extra parameters
                foreach (object parameter in extraParameters)
                {
                    if (parameter is int[] intArray)
                    {
                        foreach (int val in intArray)
                        {
                            int value = val;
                            MemoryMarshal.Write(to.Slice(bytesWritten), ref value);
                            bytesWritten += Marshal.SizeOf(value);
                        }
                    }
                    else if (parameter is uint[] uintArray)
                    {
                        foreach (uint val in uintArray)
                        {
                            uint value = val;
                            MemoryMarshal.Write(to.Slice(bytesWritten), ref value);
                            bytesWritten += Marshal.SizeOf(value);
                        }
                    }
                    else if (parameter is DriverId[] driverIdArray)
                    {
                        foreach (DriverId val in driverIdArray)
                        {
                            uint value = val;
                            MemoryMarshal.Write(to.Slice(bytesWritten), ref value);
                            bytesWritten += Marshal.SizeOf(value);
                        }
                    }
                    else if (parameter is float[] floatArray)
                    {
                        foreach (float val in floatArray)
                        {
                            float value = val;
                            MemoryMarshal.Write(to.Slice(bytesWritten), ref value);
                            bytesWritten += Marshal.SizeOf(value);
                        }
                    }
                    else if (parameter is string value)
                    {
                        Span <byte> asUnicode = Encoding.UTF8.GetBytes(value);
                        asUnicode.CopyTo(to.Slice(bytesWritten));
                        bytesWritten += asUnicode.Length;
                        bytesWritten  = AddPadding(to, bytesWritten);
                    }
                    else
                    {
                        throw new ArgumentException("Unsupported type", parameter.GetType().Name);
                    }
                }
            }

            return(bytesWritten);
        }