private static string ToIso8601(DateTime datetime, CommenceFieldType fieldType)
        {
            switch (fieldType)
            {
            case CommenceFieldType.Date:
                return(datetime.Year + "-" + datetime.Month.ToString("D2") + "-" + datetime.Day.ToString("D2"));

            case CommenceFieldType.Time:
                return(datetime.Hour.ToString("D2") + ":" + datetime.Minute.ToString("D2") + ":00");

            default:
                return(string.Empty);    // risky?
            }
        }
        /// <summary>
        /// Converts canonical value to string representation ISO8601-compliant value.
        /// </summary>
        /// <param name="canonicalValue">canonical Commence value.</param>
        /// <param name="fieldType">Commence fieldtype.</param>
        /// <returns></returns>
        // TODO: we should decouple this from Canonical.
        // As it is now, when ISO8601 is selected, so is Canonical
        // That leads to unnecessarily complex code.
        // Also, it masks the fact that ISO8601 is only for date/time values
        // It is still not trivial though, because complex exports expect values in a format that Commence may not export
        // Also, converting them back will require some extra plumbing (see UseThids stuff)
        internal static string ToIso8601(string canonicalValue, CommenceFieldType fieldType)
        {
            string retval = canonicalValue;

            switch (fieldType)
            {
            case CommenceFieldType.Date:     // expects "yyyymmdd", returns "yyyy-MM-dd"
                retval = canonicalValue.Substring(0, 4) + '-' + canonicalValue.Substring(4, 2) + '-' + canonicalValue.Substring(6, 2);
                break;

            case CommenceFieldType.Time:     // expects "hh:mm", returns "hh:mm:ss"
                string[] s = canonicalValue.Split(':');
                retval = s[0] + ':' + s[1] + ":00";
                break;
            }
            return(retval);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Translates the Commence Field Type to the property that returns the Style Index to use with it.
        /// </summary>
        /// <param name="cft">Commence fieldtype.</param>
        /// <returns>Property.</returns>
        private uint GetStyleIndexForCommenceType(CommenceFieldType cft)
        {
            switch (cft)
            {
            case CommenceFieldType.Number:
            case CommenceFieldType.Sequence:
            case CommenceFieldType.Calculation:
                return(this.CellFormatStyleIndexNumber);

            case CommenceFieldType.Date:
                return(this.CellFormatStyleIndexDate);

            case CommenceFieldType.Time:
                return(this.CellFormatStyleIndexTime);

            default:
                return(this.CellFormatStyleIndexGeneral);
            }
        }
        internal static string GetSQLiteTypeForCommenceField(this CommenceFieldType fieldType)
        {
            switch (fieldType)
            {
            case CommenceFieldType.Number:
            case CommenceFieldType.Calculation:
            case CommenceFieldType.Sequence:
                return("REAL");

            case CommenceFieldType.Date:
            case CommenceFieldType.Time:
                return("TEXT");    // TEXT expects an ISO8601 value. see: https://www.sqlite.org/datatype3.html

            case CommenceFieldType.Checkbox:
                return("INTEGER");

            default:
                return("TEXT");
            }
        }
        internal static OleDbType GetOleDbTypeForCommenceField(this CommenceFieldType fieldType)
        {
            switch (fieldType)
            {
            case CommenceFieldType.Number:
            case CommenceFieldType.Calculation:
            case CommenceFieldType.Sequence:
                return(OleDbType.Double);

            case CommenceFieldType.Date:
            case CommenceFieldType.Time:
                return(OleDbType.Date);

            case CommenceFieldType.Checkbox:
                return(OleDbType.Boolean);

            default:
                return(OleDbType.LongVarWChar);
            }
        }
        internal static DbType GetDbTypeForCommenceField(this CommenceFieldType fieldType)
        {
            switch (fieldType)
            {
            case CommenceFieldType.Number:
            case CommenceFieldType.Calculation:
            case CommenceFieldType.Sequence:
                return(DbType.Double);

            case CommenceFieldType.Date:
            case CommenceFieldType.Time:
                return(DbType.DateTime);

            case CommenceFieldType.Checkbox:
                return(DbType.Boolean);

            default:
                return(DbType.String);
            }
        }
        /// <summary>
        /// Converts canonical value to object that ADO.NET understands.
        /// </summary>
        /// <param name="canonicalValue">Canonical Commence value.</param>
        /// <param name="fieldType">Commence fieldtype.</param>
        /// <returns>Object of type that Ado understands, DBNull.Value on empty.</returns>
        internal static object ToAdoNet(string canonicalValue, CommenceFieldType fieldType)
        {
            if (string.IsNullOrEmpty(canonicalValue))
            {
                return(DBNull.Value);
            }

            object retval;

            switch (fieldType)
            {
            case CommenceFieldType.Date:
                canonicalValue = canonicalValue.Replace("-", string.Empty);     // if ISO8601, canonical value is overridden
                int yearPart  = Convert.ToInt32(canonicalValue.Substring(0, 4));
                int monthPart = Convert.ToInt32(canonicalValue.Substring(4, 2));
                int dayPart   = Convert.ToInt32(canonicalValue.Substring(6, 2));
                retval = new DateTime(yearPart, monthPart, dayPart);
                break;

            case CommenceFieldType.Time:
                int hourPart   = Convert.ToInt32(canonicalValue.Substring(0, 2));
                int minutePart = Convert.ToInt32(canonicalValue.Substring(3, 2));
                retval = new DateTime(1970, 1, 1, hourPart, minutePart, 0);
                break;

            case CommenceFieldType.Sequence:
                retval = Convert.ToDecimal(canonicalValue);
                break;

            case CommenceFieldType.Number:
            case CommenceFieldType.Calculation:
                retval = RemoveCurrencySymbol(canonicalValue);
                retval = Convert.ToDecimal(retval);
                break;

            default:
                retval = canonicalValue;
                break;
            }
            return(retval);
        }
        //internal static DocumentFormat.OpenXml.Spreadsheet.CellValues GetTypeForOpenXml(this CommenceFieldType fieldType)
        //{
        //    switch (fieldType)
        //    {
        //        case CommenceFieldType.Number:
        //        case CommenceFieldType.Calculation:
        //        case CommenceFieldType.Sequence:
        //            return DocumentFormat.OpenXml.Spreadsheet.CellValues.Number;
        //        case CommenceFieldType.Date:
        //        case CommenceFieldType.Time:
        //            return DocumentFormat.OpenXml.Spreadsheet.CellValues.Date;
        //        case CommenceFieldType.Checkbox:
        //            return DocumentFormat.OpenXml.Spreadsheet.CellValues.Boolean;
        //        default:
        //            return DocumentFormat.OpenXml.Spreadsheet.CellValues.String; // should ideally be SharedString for filesize
        //    }
        //}

        internal static string GetOleDbTypeStringForCommenceField(this CommenceFieldType fieldType)
        {
            switch (fieldType)
            {
            case CommenceFieldType.Number:
            case CommenceFieldType.Calculation:
            case CommenceFieldType.Sequence:
                return("double");

            case CommenceFieldType.Date:
            case CommenceFieldType.Time:
                return("datetime");

            case CommenceFieldType.Checkbox:
                return("bit");

            case CommenceFieldType.Name:
                return("char (50)");

            default:
                return("memo");    // just make it big :)
            }
        }
        /// <summary>
        /// Gets the System.Type for the Commence fieldtype
        /// </summary>
        /// <param name="fieldType">Commence field type</param>
        /// <returns>System.Type</returns>
        internal static Type GetTypeForCommenceField(this CommenceFieldType fieldType)
        {
            // String type DataTable columns can be specified to have a certain length,
            // but by default they take any length,
            // so there is no need to request the length from Commence.
            switch (fieldType)
            {
            case CommenceFieldType.Number:
            case CommenceFieldType.Calculation:
            case CommenceFieldType.Sequence:     // when a sequence is gotten canonical it will contain decimals
                return(typeof(double));

            case CommenceFieldType.Date:
            case CommenceFieldType.Time:
                return(typeof(DateTime));

            case CommenceFieldType.Checkbox:
                return(typeof(bool));

            default:
                return(typeof(string));
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Returns the valid qualifiermembers for a given Commence field-type
        /// </summary>
        internal static IList <QualifierMember> GetQualifierMembers
            (Dictionary <FilterQualifier, QualifierMember> dict, CommenceFieldType fieldType)
        {
            switch (fieldType)
            {
            // note the absence of HasDuplicates for Name
            // you can't check duplicates in a dde filter!
            case CommenceFieldType.Name:
            case CommenceFieldType.Text:
            case CommenceFieldType.Email:
            case CommenceFieldType.URL:
            default:
                return(dict.Where(w => w.Key.Equals(FilterQualifier.Contains) ||
                                  w.Key.Equals(FilterQualifier.DoesNotContain) ||
                                  w.Key.Equals(FilterQualifier.EqualTo) ||
                                  w.Key.Equals(FilterQualifier.NotEqualTo) ||
                                  w.Key.Equals(FilterQualifier.Between) ||
                                  w.Key.Equals(FilterQualifier.Blank))
                       .Select(s => s.Value).ToList());

            case CommenceFieldType.Date:
                return(dict.Where(w => w.Key.Equals(FilterQualifier.On) ||
                                  w.Key.Equals(FilterQualifier.After) ||
                                  w.Key.Equals(FilterQualifier.Before) ||
                                  w.Key.Equals(FilterQualifier.Between) ||
                                  w.Key.Equals(FilterQualifier.Blank))
                       .Select(s => s.Value).ToList());

            case CommenceFieldType.Time:
                return(dict.Where(w => w.Key.Equals(FilterQualifier.At) ||
                                  w.Key.Equals(FilterQualifier.After) ||
                                  w.Key.Equals(FilterQualifier.Before) ||
                                  w.Key.Equals(FilterQualifier.Between) ||
                                  w.Key.Equals(FilterQualifier.Blank))
                       .Select(s => s.Value).ToList());

            case CommenceFieldType.Checkbox:
                return(dict.Where(w => w.Key.Equals(FilterQualifier.Checked) ||
                                  w.Key.Equals(FilterQualifier.NotChecked))
                       .Select(s => s.Value).ToList());

            case CommenceFieldType.Telephone:
                return(dict.Where(w => w.Key.Equals(FilterQualifier.Contains) ||
                                  w.Key.Equals(FilterQualifier.DoesNotContain) ||
                                  w.Key.Equals(FilterQualifier.EqualTo) ||
                                  w.Key.Equals(FilterQualifier.Blank))
                       .Select(s => s.Value).ToList());

            case CommenceFieldType.Number:
            case CommenceFieldType.Calculation:
                return(dict.Where(w => w.Key.Equals(FilterQualifier.EqualTo) ||
                                  w.Key.Equals(FilterQualifier.NotEqualTo) ||
                                  w.Key.Equals(FilterQualifier.GreaterThan) ||
                                  w.Key.Equals(FilterQualifier.LessThan) ||
                                  w.Key.Equals(FilterQualifier.Between))
                       .Select(s => s.Value).ToList());

            case CommenceFieldType.Selection:
                return(dict.Where(w => w.Key.Equals(FilterQualifier.EqualTo) ||
                                  w.Key.Equals(FilterQualifier.NotEqualTo))
                       .Select(s => s.Value).ToList());
            }
        }